diff --git a/3rdparty/glslang/SPIRV/SpvTools.cpp b/3rdparty/glslang/SPIRV/SpvTools.cpp index 1803134e5..eec06e0ac 100644 --- a/3rdparty/glslang/SPIRV/SpvTools.cpp +++ b/3rdparty/glslang/SPIRV/SpvTools.cpp @@ -157,7 +157,7 @@ void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector // information when instructions are deleted or moved. Later, remove // redundant information to minimize final SPRIR-V size. if (options->generateDebugInfo) { -// BK - optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass()); + optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass()); } optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass()); optimizer.RegisterPass(spvtools::CreateMergeReturnPass()); @@ -188,7 +188,7 @@ void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); if (options->generateDebugInfo) { -// BK - optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass()); + optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass()); } optimizer.Run(spirv.data(), spirv.size(), &spirv); diff --git a/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out b/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out index 26c701db6..4451baf9e 100644 --- a/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out +++ b/3rdparty/glslang/Test/baseResults/spv.int16.amd.frag.out @@ -1,4 +1,5 @@ spv.int16.amd.frag +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 560 diff --git a/3rdparty/glslang/known_good.json b/3rdparty/glslang/known_good.json index 0c4b67b77..b5c668c34 100644 --- a/3rdparty/glslang/known_good.json +++ b/3rdparty/glslang/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "24328a0554654d9e205b532288044d6d203c3f2c" + "commit" : "a87d3ce48e88a653e855c3245a6b68deeae58efc" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "17da9f8231f78cf519b4958c2229463a63ead9e2" + "commit" : "4618b86e9e4b027a22040732dfee35e399cd2c47" } ] } diff --git a/3rdparty/spirv-tools/Android.mk b/3rdparty/spirv-tools/Android.mk index cc336a892..8597c5056 100644 --- a/3rdparty/spirv-tools/Android.mk +++ b/3rdparty/spirv-tools/Android.mk @@ -1,6 +1,9 @@ LOCAL_PATH := $(call my-dir) SPVTOOLS_OUT_PATH=$(if $(call host-path-is-absolute,$(TARGET_OUT)),$(TARGET_OUT),$(abspath $(TARGET_OUT))) -SPVHEADERS_LOCAL_PATH := $(LOCAL_PATH)/external/spirv-headers + +ifeq ($(SPVHEADERS_LOCAL_PATH),) + SPVHEADERS_LOCAL_PATH := $(LOCAL_PATH)/external/spirv-headers +endif SPVTOOLS_SRC_FILES := \ source/assembly_grammar.cpp \ @@ -19,6 +22,7 @@ SPVTOOLS_SRC_FILES := \ source/print.cpp \ source/software_version.cpp \ source/spirv_endian.cpp \ + source/spirv_optimizer_options.cpp \ source/spirv_target_env.cpp \ source/spirv_validator_options.cpp \ source/table.cpp \ @@ -50,7 +54,7 @@ SPVTOOLS_SRC_FILES := \ source/val/validate_debug.cpp \ source/val/validate_decorations.cpp \ source/val/validate_derivatives.cpp \ - source/val/validate_ext_inst.cpp \ + source/val/validate_extensions.cpp \ source/val/validate_execution_limitations.cpp \ source/val/validate_function.cpp \ source/val/validate_id.cpp \ @@ -58,12 +62,14 @@ SPVTOOLS_SRC_FILES := \ source/val/validate_interfaces.cpp \ source/val/validate_instruction.cpp \ source/val/validate_memory.cpp \ + source/val/validate_memory_semantics.cpp \ source/val/validate_mode_setting.cpp \ source/val/validate_layout.cpp \ source/val/validate_literals.cpp \ source/val/validate_logicals.cpp \ source/val/validate_non_uniform.cpp \ source/val/validate_primitives.cpp \ + source/val/validate_scopes.cpp \ source/val/validate_type.cpp SPVTOOLS_OPT_SRC_FILES := \ @@ -101,8 +107,10 @@ SPVTOOLS_OPT_SRC_FILES := \ source/opt/inline_pass.cpp \ source/opt/inline_exhaustive_pass.cpp \ source/opt/inline_opaque_pass.cpp \ + source/opt/inst_bindless_check_pass.cpp \ source/opt/instruction.cpp \ source/opt/instruction_list.cpp \ + source/opt/instrument_pass.cpp \ source/opt/ir_context.cpp \ source/opt/ir_loader.cpp \ source/opt/licm_pass.cpp \ @@ -128,6 +136,7 @@ SPVTOOLS_OPT_SRC_FILES := \ source/opt/pass.cpp \ source/opt/pass_manager.cpp \ source/opt/private_to_local_pass.cpp \ + source/opt/process_lines_pass.cpp \ source/opt/propagator.cpp \ source/opt/reduce_load_size.cpp \ source/opt/redundancy_elimination.cpp \ @@ -143,9 +152,11 @@ SPVTOOLS_OPT_SRC_FILES := \ source/opt/strength_reduction_pass.cpp \ source/opt/strip_debug_info_pass.cpp \ source/opt/strip_reflect_info_pass.cpp \ + source/opt/struct_cfg_analysis.cpp \ source/opt/type_manager.cpp \ source/opt/types.cpp \ source/opt/unify_const_pass.cpp \ + source/opt/upgrade_memory_model.cpp \ source/opt/value_number_table.cpp \ source/opt/vector_dce.cpp \ source/opt/workaround1209.cpp @@ -310,7 +321,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := SPIRV-Tools LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include \ - $(LOCAL_PATH)/external/spirv-headers/include \ + $(SPVHEADERS_LOCAL_PATH)/include \ $(SPVTOOLS_OUT_PATH) LOCAL_EXPORT_C_INCLUDES := \ $(LOCAL_PATH)/include @@ -323,7 +334,7 @@ LOCAL_MODULE := SPIRV-Tools-opt LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include \ $(LOCAL_PATH)/source \ - $(LOCAL_PATH)/external/spirv-headers/include \ + $(SPVHEADERS_LOCAL_PATH)/include \ $(SPVTOOLS_OUT_PATH) LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror LOCAL_STATIC_LIBRARIES:=SPIRV-Tools diff --git a/3rdparty/spirv-tools/BUILD.gn b/3rdparty/spirv-tools/BUILD.gn index 9fa9493df..5f0eba954 100644 --- a/3rdparty/spirv-tools/BUILD.gn +++ b/3rdparty/spirv-tools/BUILD.gn @@ -273,19 +273,36 @@ foreach(table, spvtools_vendor_tables) { } } -config("spvtools_config") { +config("spvtools_public_config") { + include_dirs = [ "include" ] +} + +config("spvtools_internal_config") { include_dirs = [ ".", - "include", "$target_gen_dir", "${spirv_headers}/include", ] + configs = [ ":spvtools_public_config" ] + if (is_clang) { cflags = [ "-Wno-implicit-fallthrough" ] } } +source_set("spvtools_headers") { + sources = [ + "include/spirv-tools/libspirv.h", + "include/spirv-tools/libspirv.hpp", + "include/spirv-tools/linker.hpp", + "include/spirv-tools/optimizer.hpp", + "include/spirv-tools/instrument.hpp", + ] + + public_configs = [ ":spvtools_public_config" ] +} + static_library("spvtools") { deps = [ ":spvtools_core_enums_unified1", @@ -330,6 +347,8 @@ static_library("spvtools") { "source/spirv_definition.h", "source/spirv_endian.cpp", "source/spirv_endian.h", + "source/spirv_optimizer_options.cpp", + "source/spirv_optimizer_options.h", "source/spirv_target_env.cpp", "source/spirv_target_env.h", "source/spirv_validator_options.cpp", @@ -356,9 +375,15 @@ static_library("spvtools") { "source/util/timer.h", ] - public_configs = [ ":spvtools_config" ] + public_deps = [ + ":spvtools_headers", + ] + configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", + ":spvtools_internal_config", + ] } static_library("spvtools_val") { @@ -386,7 +411,7 @@ static_library("spvtools_val") { "source/val/validate_decorations.cpp", "source/val/validate_derivatives.cpp", "source/val/validate_execution_limitations.cpp", - "source/val/validate_ext_inst.cpp", + "source/val/validate_extensions.cpp", "source/val/validate_function.cpp", "source/val/validate_id.cpp", "source/val/validate_image.cpp", @@ -396,9 +421,11 @@ static_library("spvtools_val") { "source/val/validate_literals.cpp", "source/val/validate_logicals.cpp", "source/val/validate_memory.cpp", + "source/val/validate_memory_semantics.cpp", "source/val/validate_mode_setting.cpp", "source/val/validate_non_uniform.cpp", "source/val/validate_primitives.cpp", + "source/val/validate_scopes.cpp", "source/val/validate_type.cpp", "source/val/validation_state.cpp", ] @@ -406,10 +433,15 @@ static_library("spvtools_val") { deps = [ ":spvtools", ] + public_deps = [ + ":spvtools_headers", + ] - public_configs = [ ":spvtools_config" ] configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", + ":spvtools_internal_config", + ] } static_library("spvtools_opt") { @@ -482,10 +514,14 @@ static_library("spvtools_opt") { "source/opt/inline_opaque_pass.h", "source/opt/inline_pass.cpp", "source/opt/inline_pass.h", + "source/opt/inst_bindless_check_pass.cpp", + "source/opt/inst_bindless_check_pass.h", "source/opt/instruction.cpp", "source/opt/instruction.h", "source/opt/instruction_list.cpp", "source/opt/instruction_list.h", + "source/opt/instrument_pass.cpp", + "source/opt/instrument_pass.h", "source/opt/ir_builder.h", "source/opt/ir_context.cpp", "source/opt/ir_context.h", @@ -539,6 +575,8 @@ static_library("spvtools_opt") { "source/opt/passes.h", "source/opt/private_to_local_pass.cpp", "source/opt/private_to_local_pass.h", + "source/opt/process_lines_pass.cpp", + "source/opt/process_lines_pass.h", "source/opt/propagator.cpp", "source/opt/propagator.h", "source/opt/reduce_load_size.cpp", @@ -570,6 +608,8 @@ static_library("spvtools_opt") { "source/opt/strip_debug_info_pass.h", "source/opt/strip_reflect_info_pass.cpp", "source/opt/strip_reflect_info_pass.h", + "source/opt/struct_cfg_analysis.cpp", + "source/opt/struct_cfg_analysis.h", "source/opt/tree_iterator.h", "source/opt/type_manager.cpp", "source/opt/type_manager.h", @@ -577,6 +617,8 @@ static_library("spvtools_opt") { "source/opt/types.h", "source/opt/unify_const_pass.cpp", "source/opt/unify_const_pass.h", + "source/opt/upgrade_memory_model.cpp", + "source/opt/upgrade_memory_model.h", "source/opt/value_number_table.cpp", "source/opt/value_number_table.h", "source/opt/vector_dce.cpp", @@ -584,13 +626,19 @@ static_library("spvtools_opt") { "source/opt/workaround1209.cpp", "source/opt/workaround1209.h", ] + deps = [ ":spvtools", ] + public_deps = [ + ":spvtools_headers", + ] - public_configs = [ ":spvtools_config" ] configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", + ":spvtools_internal_config", + ] } group("SPIRV-Tools") { @@ -641,12 +689,6 @@ if (!build_with_chromium) { } } -config("spvtools_test_config") { - if (is_clang) { - cflags = [ "-Wno-self-assign" ] - } -} - test("spvtools_test") { sources = [ "test/assembly_context_test.cpp", @@ -728,10 +770,11 @@ test("spvtools_test") { sources += [ "${googletest_dir}/googletest/src/gtest_main.cc" ] } - configs += [ - ":spvtools_config", - ":spvtools_test_config", - ] + if (is_clang) { + cflags_cc = [ "-Wno-self-assign" ] + } + + configs += [ ":spvtools_internal_config" ] } if (spirv_tools_standalone) { @@ -752,5 +795,5 @@ executable("spirv-as") { ":spvtools", ":spvtools_build_version", ] - configs += [ ":spvtools_config" ] + configs += [ ":spvtools_internal_config" ] } diff --git a/3rdparty/spirv-tools/CHANGES b/3rdparty/spirv-tools/CHANGES index ef499027f..7f9008f01 100644 --- a/3rdparty/spirv-tools/CHANGES +++ b/3rdparty/spirv-tools/CHANGES @@ -1,7 +1,98 @@ Revision history for SPIRV-Tools -v2018.5-dev 2018-07-08 +v2018.7-dev 2018-12-10 - General: + - Created a new tool called spirv-reduce. + - Add cmake option to turn off SPIRV_TIMER_ENABLED (#2103) + - New optimization pass to update the memory model from GLSL450 to VulkanKHR. + - Optimizer + - Added the instrumentation passes for bindless validation. + - Added passes to help preserve OpLine information (#2027) + - Add basic support for EXT_fragment_invocation_density (#2100) + - Fix invalid OpPhi generated by merge-return. (#2172) + Fixes: + - #2018: Don't inline functions with a return in a structured CFG contstruct. + - #2047: Fix bug in folding when volatile stores are present. + - #2053: Fix check for when folding floating pointer values is allowed. + - #2130: Don't inline recursive functions. + - Validator + - Changed the naming convention of outputing ids with names in diagnostic messages. + - Added validation rules for UniformConstant variables in Vulkan. + - #1949: Validate uniform variable type in Vulkan + - Ensure for OpVariable that result type and storage class operand agree (#2052) + - Validator: Support VK_EXT_scalar_block_layout + - Added Vulkan memory model semantics validation + - Added validation checkes spefic to WebGPU environment. + - Add support for VK_EXT_Transform_feedback capabilities (#2088) + - Add validation for OpArrayLength. (#2117) + - Ensure that function parameter's type is not void (#2118) + - Validate pointer variables (#2111) + - Add check for QueueFamilyKHMR memory scope (#2144) + - Validate PushConstants annotation and type (#2140) + - Allow Float16/Int8 for Vulkan 1.0 (#2153) + - Check binding annotations in resource variables (#2151, #2167) + - Validate OpForwardPointer (#2156) + Fixes: + - #2049: Allow InstanceId for NV ray tracing + - Reduce + - Initial commit wit a few passes to reduce test cases. + Fixes: + + +v2018.6 2018-11-07 + - General: + - Added support for the Nvidia Turing and ray tracing extensions. + - Make C++11 the CXX standard in CMakeLists.txt. + - Enabled a parallel build for MSVC. + - Enable pre-compiled headers for MSVC. + - Added a code of conduct. + - EFFCEE and RE2 are now required when build the tests. + - Optimizer + - Unrolling loops marked for unrolling in the legalization passes. + - Improved the compile time of loop unrolling. + - Changee merge-return to create a dummy loop around the function. + - Small improvement to merge-blocks to allow it to merge more often. + - Enforce an upper bound for the ids, and add option to set it. + - #1966: Report error if there are unreachable block before running merge return + Fixes: + - #1917: Allow 0 (meaning unlimited) as a parameter to --scalar-replacement + - #1915: Improve handling of group decorations. + - #1942: Fix incorrect uses of the constant manager. Avoids type mismatches in generated code. + - #1997: Fix dead branch elimination when there is a loop in folded selection. + - #1991: Fixes legality check in if-conversion. + - #1987: Add nullptr check to array copy propagation. + - #1984: Better handling of OpUnreachable in ADCE. + - #1983: Run merge return on reachable functions only. + - #1956: Handled atomic operations in ADCE. + - #1963: Fold integer divisions by 0 to 0. + - #2019: Handle MemberDecorateStringGOOGLE in ADCE and strip reflect. + - Validator + - Added validation for OpGroupNonUniformBallotBitCount. + - Added validation for the Vulkan memory model. + - Added support for VK_KHR_shader_atddomic_int64. + - Added validation for execution modes. + - Added validation for runtime array layouts. + - Added validation for 8-bit storage. + - Added validation of OpPhi instructions with pointer result type. + - Added checks for the Vulkan memory model. + - Validate MakeTexelAvailableKHR and MakeTexelVisibleKHR + - Allow atomic function pointer for OpenCL. + - FPRounding mode checks were implemented. + - Added validation for the id bound with an option to set the max id bound. + Fixes: + - #1882: Improve the validation of decorations to reduce memory usage. + - #1891: Fix an potential infinite loop in dead-branch-elimination. + - #1405: Validate the storage class of boolean objects. + - #1880: Identify arrays of type void as invalid. + - #487: Validate OpImageTexelPointer. + - #1922: Validate OpPhi instructions are at the start of a block correctly. + - #1923: Validate function scope variable are at the start of the entry block. + +v2018.5 2018-09-07 + - General: + - Support SPV_KHR_vulkan_memory_model + - Update Dim capabilities, to match SPIR-V 1.3 Rev 4 + - Automated build bots no run tests for the VS2013 case - Support Chromium GN build - Use Kokoro bots: - Disable Travis-CI bots @@ -11,26 +102,48 @@ v2018.5-dev 2018-07-08 - Fixes for ClangTidy, and whitespace (passes 'git cl presumit --all -uf') - Fix unused param compile warnings/errors when Effcee not present - Avoid including time headers when timer functionality is disabled + - Avoid too-stringent warnings flags for Clang on Windows + - Internal refactoring + - Add hooks for automated fuzzing + - Add testing of command line executables - #1688: Use binary mode on stdin; fixes "spirv-dis git clone https://github.com/KhronosGroup/SPIRV-Headers.git external/spirv-headers +git clone https://github.com/google/effcee.git external/effcee +git clone https://github.com/google/re2.git external/re2 git clone https://github.com/google/googletest.git external/googletest # optional mkdir build && cd build @@ -269,7 +273,7 @@ The following CMake options are supported: See [`CMakeLists.txt`](CMakeLists.txt) for details. * `SPIRV_WERROR={ON|OFF}`, default `ON` - Forces a compilation error on any warnings encountered by enabling the compiler-specific compiler front-end - option. + option. No compiler front-end options are enabled when this option is OFF. Additionally, you can pass additional C preprocessor definitions to SPIRV-Tools via setting `SPIRV_TOOLS_EXTRA_DEFINITIONS`. For example, by setting it to diff --git a/3rdparty/spirv-tools/build/CMakeCache.txt b/3rdparty/spirv-tools/build/CMakeCache.txt new file mode 100644 index 000000000..6b6c2a04c --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeCache.txt @@ -0,0 +1,437 @@ +# This is the CMakeCache file. +# For build in directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or +// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//Flags used by the compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release builds for minimum +// size. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during release builds with debug info. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//Flags used by the compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release builds for minimum +// size. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during release builds with debug info. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//user executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//system admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=spirv-tools + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Flags used by the linker during the creation of dll's. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Path to a program. +NOSETESTS_EXE:FILEPATH=NOSETESTS_EXE-NOTFOUND + +//Path to a program. +PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python + +//Run RE2 Tests +RE2_BUILD_TESTING:STRING=OFF + +//Skip installation +SKIP_SPIRV_TOOLS_INSTALL:BOOL=OFF + +//Dependencies for the target +SPIRV-Tools-link_LIB_DEPENDS:STATIC=general;SPIRV-Tools-opt; + +//Dependencies for the target +SPIRV-Tools-opt_LIB_DEPENDS:STATIC=general;SPIRV-Tools; + +//Dependencies for target +SPIRV-Tools-shared_LIB_DEPENDS:STATIC= + +//Dependencies for target +SPIRV-Tools_LIB_DEPENDS:STATIC= + +//Build SPIR-V compressing codec +SPIRV_BUILD_COMPRESSION:BOOL=OFF + +//In a debug build, check if the IR context is in a valid state. +SPIRV_CHECK_CONTEXT:BOOL=ON + +//Enable color terminal output +SPIRV_COLOR_TERMINAL:BOOL=ON + +//Enable excessive debug output +SPIRV_LOG_DEBUG:BOOL=OFF + +//Skip building the executable and tests along with the library +SPIRV_SKIP_EXECUTABLES:BOOL=OFF + +//Skip building tests along with the library +SPIRV_SKIP_TESTS:BOOL=OFF + +//Install Emacs helper to disassemble/assemble SPIR-V binaries +// on file load/save. +SPIRV_TOOLS_INSTALL_EMACS_HELPERS:BOOL=OFF + +//Enable -Weverything +SPIRV_WARN_EVERYTHING:BOOL=OFF + +//Enable error on warning +SPIRV_WERROR:BOOL=ON + +//Value Computed by CMake +spirv-tools_BINARY_DIR:STATIC=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +//Value Computed by CMake +spirv-tools_SOURCE_DIR:STATIC=/home/bkaradzic/Private/projects/_github/SPIRV-Tools + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=5 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=1 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/bkaradzic/Private/projects/_github/SPIRV-Tools +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=22 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.5 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding PythonInterp +FIND_PACKAGE_MESSAGE_DETAILS_PythonInterp:INTERNAL=[/usr/bin/python][v2.7.12()] +//ADVANCED property for variable: PYTHON_EXECUTABLE +PYTHON_EXECUTABLE-ADVANCED:INTERNAL=1 +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeCCompiler.cmake b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeCCompiler.cmake new file mode 100644 index 000000000..08a8a2df7 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeCCompiler.cmake @@ -0,0 +1,67 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "7.3.0") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..7f67e5e04 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake @@ -0,0 +1,68 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "7.3.0") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP) +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;c") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 000000000..84a836c10 Binary files /dev/null and b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin differ diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 000000000..e988a2ebf Binary files /dev/null and b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin differ diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeSystem.cmake b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeSystem.cmake new file mode 100644 index 000000000..daf4b4c75 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-4.15.0-36-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-36-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-4.15.0-36-generic") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "4.15.0-36-generic") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 000000000..570a15e99 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,544 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(__ARMCC_VERSION) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if !defined(__STDC_VERSION__) + "90" +#elif __STDC_VERSION__ >= 201000L + "11" +#elif __STDC_VERSION__ >= 199901L + "99" +#else +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdC/a.out b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdC/a.out new file mode 100755 index 000000000..815e3ee33 Binary files /dev/null and b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdC/a.out differ diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..e6d853637 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,533 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(__ARMCC_VERSION) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if __cplusplus >= 201402L + "14" +#elif __cplusplus >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdCXX/a.out b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdCXX/a.out new file mode 100755 index 000000000..d54969047 Binary files /dev/null and b/3rdparty/spirv-tools/build/CMakeFiles/3.5.1/CompilerIdCXX/a.out differ diff --git a/3rdparty/spirv-tools/build/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/CMakeFiles/CMakeOutput.log b/3rdparty/spirv-tools/build/CMakeFiles/CMakeOutput.log new file mode 100644 index 000000000..a7aaa5970 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/CMakeOutput.log @@ -0,0 +1,566 @@ +The system is: Linux - 4.15.0-36-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/3.5.1/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/3.5.1/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_29485/fast" +/usr/bin/make -f CMakeFiles/cmTC_29485.dir/build.make CMakeFiles/cmTC_29485.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_29485.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_29485.dir/testCCompiler.c.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_29485 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_29485.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_29485.dir/testCCompiler.c.o -o cmTC_29485 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_26ef8/fast" +/usr/bin/make -f CMakeFiles/cmTC_26ef8.dir/build.make CMakeFiles/cmTC_26ef8.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -o CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c +Linking C executable cmTC_26ef8 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_26ef8.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o -o cmTC_26ef8 -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-21ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 7.3.0 (Ubuntu 7.3.0-21ubuntu1~16.04) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_26ef8' '-rdynamic' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQFAwlw.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_26ef8 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtend.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_26ef8' '-rdynamic' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/make" "cmTC_26ef8/fast"] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_26ef8.dir/build.make CMakeFiles/cmTC_26ef8.dir/build] + ignore line: [make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c] + ignore line: [Linking C executable cmTC_26ef8] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_26ef8.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o -o cmTC_26ef8 -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-21ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 7.3.0 (Ubuntu 7.3.0-21ubuntu1~16.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_26ef8' '-rdynamic' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQFAwlw.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_26ef8 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtend.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/7/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccQFAwlw.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--sysroot=/] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_26ef8] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..] + arg [CMakeFiles/cmTC_26ef8.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o] ==> ignore + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7] ==> [/usr/lib/gcc/x86_64-linux-gnu/7] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> [/usr/lib] + implicit libs: [c] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_4dd30/fast" +/usr/bin/make -f CMakeFiles/cmTC_4dd30.dir/build.make CMakeFiles/cmTC_4dd30.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_4dd30.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_4dd30.dir/feature_tests.c.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/feature_tests.c +Linking C executable cmTC_4dd30 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4dd30.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_4dd30.dir/feature_tests.c.o -o cmTC_4dd30 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_51ae2/fast" +/usr/bin/make -f CMakeFiles/cmTC_51ae2.dir/build.make CMakeFiles/cmTC_51ae2.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_51ae2.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_51ae2.dir/feature_tests.c.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/feature_tests.c +Linking C executable cmTC_51ae2 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_51ae2.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_51ae2.dir/feature_tests.c.o -o cmTC_51ae2 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_511a5/fast" +/usr/bin/make -f CMakeFiles/cmTC_511a5.dir/build.make CMakeFiles/cmTC_511a5.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_511a5.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_511a5.dir/feature_tests.c.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/feature_tests.c +Linking C executable cmTC_511a5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_511a5.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_511a5.dir/feature_tests.c.o -o cmTC_511a5 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros +Determining if the CXX compiler works passed with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_10dab/fast" +/usr/bin/make -f CMakeFiles/cmTC_10dab.dir/build.make CMakeFiles/cmTC_10dab.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_10dab.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_10dab.dir/testCXXCompiler.cxx.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_10dab +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_10dab.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_10dab.dir/testCXXCompiler.cxx.o -o cmTC_10dab -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_3fb04/fast" +/usr/bin/make -f CMakeFiles/cmTC_3fb04.dir/build.make CMakeFiles/cmTC_3fb04.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -o CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp +Linking CXX executable cmTC_3fb04 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3fb04.dir/link.txt --verbose=1 +/usr/bin/c++ -v CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_3fb04 -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-21ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 7.3.0 (Ubuntu 7.3.0-21ubuntu1~16.04) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_3fb04' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/cc1abdYG.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_3fb04 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtend.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_3fb04' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/make" "cmTC_3fb04/fast"] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_3fb04.dir/build.make CMakeFiles/cmTC_3fb04.dir/build] + ignore line: [make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -o CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Linking CXX executable cmTC_3fb04] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3fb04.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_3fb04 -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-21ubuntu1~16.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 7.3.0 (Ubuntu 7.3.0-21ubuntu1~16.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_3fb04' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/cc1abdYG.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_3fb04 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtend.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/7/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc1abdYG.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--sysroot=/] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_3fb04] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..] + arg [CMakeFiles/cmTC_3fb04.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/7/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o] ==> ignore + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7] ==> [/usr/lib/gcc/x86_64-linux-gnu/7] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/7/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;c] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/7;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + + +Detecting CXX [-std=c++14] compiler features compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_9a032/fast" +/usr/bin/make -f CMakeFiles/cmTC_9a032.dir/build.make CMakeFiles/cmTC_9a032.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_9a032.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++14 -o CMakeFiles/cmTC_9a032.dir/feature_tests.cxx.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_9a032 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9a032.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_9a032.dir/feature_tests.cxx.o -o cmTC_9a032 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:1cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:1cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:1cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:1cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:1cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:1cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:1cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:1cxx_relaxed_constexpr + Feature record: CXX_FEATURE:1cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:1cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++11] compiler features compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_086c5/fast" +/usr/bin/make -f CMakeFiles/cmTC_086c5.dir/build.make CMakeFiles/cmTC_086c5.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_086c5.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++11 -o CMakeFiles/cmTC_086c5.dir/feature_tests.cxx.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_086c5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_086c5.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_086c5.dir/feature_tests.cxx.o -o cmTC_086c5 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++98] compiler features compiled with the following output: +Change Dir: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_7f9e5/fast" +/usr/bin/make -f CMakeFiles/cmTC_7f9e5.dir/build.make CMakeFiles/cmTC_7f9e5.dir/build +make[1]: Entering directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_7f9e5.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++98 -o CMakeFiles/cmTC_7f9e5.dir/feature_tests.cxx.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_7f9e5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7f9e5.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_7f9e5.dir/feature_tests.cxx.o -o cmTC_7f9e5 -rdynamic +make[1]: Leaving directory '/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:0cxx_alias_templates + Feature record: CXX_FEATURE:0cxx_alignas + Feature record: CXX_FEATURE:0cxx_alignof + Feature record: CXX_FEATURE:0cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:0cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:0cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:0cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:0cxx_default_function_template_args + Feature record: CXX_FEATURE:0cxx_defaulted_functions + Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:0cxx_delegating_constructors + Feature record: CXX_FEATURE:0cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:0cxx_enum_forward_declarations + Feature record: CXX_FEATURE:0cxx_explicit_conversions + Feature record: CXX_FEATURE:0cxx_extended_friend_declarations + Feature record: CXX_FEATURE:0cxx_extern_templates + Feature record: CXX_FEATURE:0cxx_final + Feature record: CXX_FEATURE:0cxx_func_identifier + Feature record: CXX_FEATURE:0cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:0cxx_inheriting_constructors + Feature record: CXX_FEATURE:0cxx_inline_namespaces + Feature record: CXX_FEATURE:0cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:0cxx_local_type_template_args + Feature record: CXX_FEATURE:0cxx_long_long_type + Feature record: CXX_FEATURE:0cxx_noexcept + Feature record: CXX_FEATURE:0cxx_nonstatic_member_init + Feature record: CXX_FEATURE:0cxx_nullptr + Feature record: CXX_FEATURE:0cxx_override + Feature record: CXX_FEATURE:0cxx_range_for + Feature record: CXX_FEATURE:0cxx_raw_string_literals + Feature record: CXX_FEATURE:0cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:0cxx_right_angle_brackets + Feature record: CXX_FEATURE:0cxx_rvalue_references + Feature record: CXX_FEATURE:0cxx_sizeof_member + Feature record: CXX_FEATURE:0cxx_static_assert + Feature record: CXX_FEATURE:0cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:0cxx_thread_local + Feature record: CXX_FEATURE:0cxx_trailing_return_types + Feature record: CXX_FEATURE:0cxx_unicode_literals + Feature record: CXX_FEATURE:0cxx_uniform_initialization + Feature record: CXX_FEATURE:0cxx_unrestricted_unions + Feature record: CXX_FEATURE:0cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:0cxx_variadic_macros + Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/3rdparty/spirv-tools/build/CMakeFiles/CMakeRuleHashes.txt b/3rdparty/spirv-tools/build/CMakeFiles/CMakeRuleHashes.txt new file mode 100644 index 000000000..24df65417 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/CMakeRuleHashes.txt @@ -0,0 +1,24 @@ +# Hashes of file build rules. +a3a67ea3d224fda21fd5a52538aac45e CMakeFiles/spirv-tools-pkg-config +e0651873fcee64545700dd83cf425d7d CMakeFiles/spirv-tools-shared-pkg-config +c4bbdb4ddc901c2270fe08710c6d7296 DebugInfo.h +5896e8e3f9b3d42d3ca7be3c26e73115 build-version.inc +831c4409dccccfbe3caf54e152aeab9a core.insts-unified1.inc +e82743ac5171b193e896f59fda57456a debuginfo.insts.inc +3c535b06d6924a641a46b65343e372c8 extension_enum.inc +e5ee8fcfaf5e0d0ee14e42827f5a28d7 generators.inc +c9648bb7599ab3c63c9cbf3f63105dc3 glsl.std.450.insts.inc +ca9006b7e8de20db43363fbdf4154a32 opencl.std.insts.inc +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-build-version +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-debuginfo +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-header-DebugInfo +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-spv-amd-gcn-shader +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-spv-amd-shader-ballot +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax +fbc7975cd1db0b770eb5a317b85548b4 source/CMakeFiles/spirv-tools-vimsyntax +c691cb79776968d34fbe636de95762ba spv-amd-gcn-shader.insts.inc +98898bc0b78e884c61f122035917814a spv-amd-shader-ballot.insts.inc +887286f1e7d97d480c4ca2319a7a28ea spv-amd-shader-explicit-vertex-parameter.insts.inc +95834c67f02254c5ea078b11a2de5321 spv-amd-shader-trinary-minmax.insts.inc +b5344da2df0958bc57287a90ddcfaaef spvasm.vim diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Makefile.cmake b/3rdparty/spirv-tools/build/CMakeFiles/Makefile.cmake new file mode 100644 index 000000000..1cd86f106 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Makefile.cmake @@ -0,0 +1,183 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "../CMakeLists.txt" + "CMakeFiles/3.5.1/CMakeCCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake" + "CMakeFiles/3.5.1/CMakeSystem.cmake" + "CMakeFiles/feature_tests.c" + "CMakeFiles/feature_tests.cxx" + "../cmake/setup_build.cmake" + "../examples/CMakeLists.txt" + "../examples/cpp-interface/CMakeLists.txt" + "../external/CMakeLists.txt" + "../source/CMakeLists.txt" + "../source/comp/CMakeLists.txt" + "../source/link/CMakeLists.txt" + "../source/opt/CMakeLists.txt" + "../test/CMakeLists.txt" + "../test/comp/CMakeLists.txt" + "../test/link/CMakeLists.txt" + "../test/opt/CMakeLists.txt" + "../test/opt/dominator_tree/CMakeLists.txt" + "../test/opt/loop_optimizations/CMakeLists.txt" + "../test/stats/CMakeLists.txt" + "../test/tools/CMakeLists.txt" + "../test/tools/opt/CMakeLists.txt" + "../test/util/CMakeLists.txt" + "../test/val/CMakeLists.txt" + "../tools/CMakeLists.txt" + "../tools/emacs/CMakeLists.txt" + "../tools/lesspipe/CMakeLists.txt" + "/usr/share/cmake-3.5/Modules/CMakeCCompiler.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c" + "/usr/share/cmake-3.5/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCXXCompiler.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp" + "/usr/share/cmake-3.5/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCompilerIdDetection.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerId.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake" + "/usr/share/cmake-3.5/Modules/CMakeFindBinUtils.cmake" + "/usr/share/cmake-3.5/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.5/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeParseArguments.cmake" + "/usr/share/cmake-3.5/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/share/cmake-3.5/Modules/CMakeSystem.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestCXXCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestCompilerCommon.cmake" + "/usr/share/cmake-3.5/Modules/CMakeUnixFindMake.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-C-FeatureTests.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX-FeatureTests.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/MIPSpro-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.5/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.5/Modules/FindPythonInterp.cmake" + "/usr/share/cmake-3.5/Modules/GNUInstallDirs.cmake" + "/usr/share/cmake-3.5/Modules/Internal/FeatureTesting.cmake" + "/usr/share/cmake-3.5/Modules/MultiArchCross.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-CXX.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.5/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.5.1/CMakeSystem.cmake" + "CMakeFiles/3.5.1/CMakeCCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "external/CMakeFiles/CMakeDirectoryInformation.cmake" + "source/CMakeFiles/CMakeDirectoryInformation.cmake" + "source/comp/CMakeFiles/CMakeDirectoryInformation.cmake" + "source/opt/CMakeFiles/CMakeDirectoryInformation.cmake" + "source/link/CMakeFiles/CMakeDirectoryInformation.cmake" + "tools/CMakeFiles/CMakeDirectoryInformation.cmake" + "tools/lesspipe/CMakeFiles/CMakeDirectoryInformation.cmake" + "tools/emacs/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/comp/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/link/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/opt/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/opt/dominator_tree/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/opt/loop_optimizations/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/stats/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/tools/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/tools/opt/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/util/CMakeFiles/CMakeDirectoryInformation.cmake" + "test/val/CMakeFiles/CMakeDirectoryInformation.cmake" + "examples/CMakeFiles/CMakeDirectoryInformation.cmake" + "examples/cpp-interface/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/spirv-tools-shared-pkg-config.dir/DependInfo.cmake" + "CMakeFiles/spirv-tools-pkg-config.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-debuginfo.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-header-DebugInfo.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-build-version.dir/DependInfo.cmake" + "source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/DependInfo.cmake" + "source/CMakeFiles/SPIRV-Tools-shared.dir/DependInfo.cmake" + "source/CMakeFiles/spirv-tools-vimsyntax.dir/DependInfo.cmake" + "source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake" + "source/link/CMakeFiles/SPIRV-Tools-link.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-cfg.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-dis.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-as.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-val.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-link.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-opt.dir/DependInfo.cmake" + "tools/CMakeFiles/spirv-stats.dir/DependInfo.cmake" + "examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/DependInfo.cmake" + ) diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Makefile2 b/3rdparty/spirv-tools/build/CMakeFiles/Makefile2 new file mode 100644 index 000000000..462840811 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Makefile2 @@ -0,0 +1,1284 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Target rules for target CMakeFiles/spirv-tools-shared-pkg-config.dir + +# All Build rule for target. +CMakeFiles/spirv-tools-shared-pkg-config.dir/all: + $(MAKE) -f CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make CMakeFiles/spirv-tools-shared-pkg-config.dir/depend + $(MAKE) -f CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make CMakeFiles/spirv-tools-shared-pkg-config.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-shared-pkg-config" +.PHONY : CMakeFiles/spirv-tools-shared-pkg-config.dir/all + +# Include target in all. +all: CMakeFiles/spirv-tools-shared-pkg-config.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/spirv-tools-shared-pkg-config.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/spirv-tools-shared-pkg-config.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : CMakeFiles/spirv-tools-shared-pkg-config.dir/rule + +# Convenience name for target. +spirv-tools-shared-pkg-config: CMakeFiles/spirv-tools-shared-pkg-config.dir/rule + +.PHONY : spirv-tools-shared-pkg-config + +# clean rule for target. +CMakeFiles/spirv-tools-shared-pkg-config.dir/clean: + $(MAKE) -f CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make CMakeFiles/spirv-tools-shared-pkg-config.dir/clean +.PHONY : CMakeFiles/spirv-tools-shared-pkg-config.dir/clean + +# clean rule for target. +clean: CMakeFiles/spirv-tools-shared-pkg-config.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/spirv-tools-pkg-config.dir + +# All Build rule for target. +CMakeFiles/spirv-tools-pkg-config.dir/all: + $(MAKE) -f CMakeFiles/spirv-tools-pkg-config.dir/build.make CMakeFiles/spirv-tools-pkg-config.dir/depend + $(MAKE) -f CMakeFiles/spirv-tools-pkg-config.dir/build.make CMakeFiles/spirv-tools-pkg-config.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-pkg-config" +.PHONY : CMakeFiles/spirv-tools-pkg-config.dir/all + +# Include target in all. +all: CMakeFiles/spirv-tools-pkg-config.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/spirv-tools-pkg-config.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/spirv-tools-pkg-config.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : CMakeFiles/spirv-tools-pkg-config.dir/rule + +# Convenience name for target. +spirv-tools-pkg-config: CMakeFiles/spirv-tools-pkg-config.dir/rule + +.PHONY : spirv-tools-pkg-config + +# clean rule for target. +CMakeFiles/spirv-tools-pkg-config.dir/clean: + $(MAKE) -f CMakeFiles/spirv-tools-pkg-config.dir/build.make CMakeFiles/spirv-tools-pkg-config.dir/clean +.PHONY : CMakeFiles/spirv-tools-pkg-config.dir/clean + +# clean rule for target. +clean: CMakeFiles/spirv-tools-pkg-config.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory external + +# Convenience name for "all" pass in the directory. +external/all: + +.PHONY : external/all + +# Convenience name for "clean" pass in the directory. +external/clean: + +.PHONY : external/clean + +# Convenience name for "preinstall" pass in the directory. +external/preinstall: + +.PHONY : external/preinstall + +#============================================================================= +# Directory level rules for directory source + +# Convenience name for "all" pass in the directory. +source/all: source/CMakeFiles/SPIRV-Tools.dir/all +source/all: source/CMakeFiles/SPIRV-Tools-shared.dir/all +source/all: source/comp/all +source/all: source/opt/all +source/all: source/link/all + +.PHONY : source/all + +# Convenience name for "clean" pass in the directory. +source/clean: source/CMakeFiles/spirv-tools-debuginfo.dir/clean +source/clean: source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean +source/clean: source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean +source/clean: source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean +source/clean: source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean +source/clean: source/CMakeFiles/spirv-tools-build-version.dir/clean +source/clean: source/CMakeFiles/SPIRV-Tools.dir/clean +source/clean: source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean +source/clean: source/CMakeFiles/SPIRV-Tools-shared.dir/clean +source/clean: source/CMakeFiles/spirv-tools-vimsyntax.dir/clean +source/clean: source/comp/clean +source/clean: source/opt/clean +source/clean: source/link/clean + +.PHONY : source/clean + +# Convenience name for "preinstall" pass in the directory. +source/preinstall: source/comp/preinstall +source/preinstall: source/opt/preinstall +source/preinstall: source/link/preinstall + +.PHONY : source/preinstall + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-debuginfo.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-debuginfo.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-debuginfo.dir/build.make source/CMakeFiles/spirv-tools-debuginfo.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-debuginfo.dir/build.make source/CMakeFiles/spirv-tools-debuginfo.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-debuginfo" +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-debuginfo.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-debuginfo.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/rule + +# Convenience name for target. +spirv-tools-debuginfo: source/CMakeFiles/spirv-tools-debuginfo.dir/rule + +.PHONY : spirv-tools-debuginfo + +# clean rule for target. +source/CMakeFiles/spirv-tools-debuginfo.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-debuginfo.dir/build.make source/CMakeFiles/spirv-tools-debuginfo.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-debuginfo.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-spv-amd-shader-ballot" +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-shader-ballot: source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule + +.PHONY : spirv-tools-spv-amd-shader-ballot + +# clean rule for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-spv-amd-shader-trinary-minmax" +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-shader-trinary-minmax: source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule + +.PHONY : spirv-tools-spv-amd-shader-trinary-minmax + +# clean rule for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-spv-amd-gcn-shader" +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-gcn-shader: source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule + +.PHONY : spirv-tools-spv-amd-gcn-shader + +# clean rule for target. +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-header-DebugInfo.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make source/CMakeFiles/spirv-tools-header-DebugInfo.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=97 "Built target spirv-tools-header-DebugInfo" +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-header-DebugInfo.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule + +# Convenience name for target. +spirv-tools-header-DebugInfo: source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule + +.PHONY : spirv-tools-header-DebugInfo + +# clean rule for target. +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-build-version.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-build-version.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-build-version.dir/build.make source/CMakeFiles/spirv-tools-build-version.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-build-version.dir/build.make source/CMakeFiles/spirv-tools-build-version.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-build-version" +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-build-version.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-build-version.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/rule + +# Convenience name for target. +spirv-tools-build-version: source/CMakeFiles/spirv-tools-build-version.dir/rule + +.PHONY : spirv-tools-build-version + +# clean rule for target. +source/CMakeFiles/spirv-tools-build-version.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-build-version.dir/build.make source/CMakeFiles/spirv-tools-build-version.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-build-version.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/SPIRV-Tools.dir + +# All Build rule for target. +source/CMakeFiles/SPIRV-Tools.dir/all: + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/depend + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 "Built target SPIRV-Tools" +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/all + +# Include target in all. +all: source/CMakeFiles/SPIRV-Tools.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +source/CMakeFiles/SPIRV-Tools.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 28 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/SPIRV-Tools.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/rule + +# Convenience name for target. +SPIRV-Tools: source/CMakeFiles/SPIRV-Tools.dir/rule + +.PHONY : SPIRV-Tools + +# clean rule for target. +source/CMakeFiles/SPIRV-Tools.dir/clean: + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/clean +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/SPIRV-Tools.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=98 "Built target spirv-tools-spv-amd-shader-explicit-vertex-parameter" +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-shader-explicit-vertex-parameter: source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule + +.PHONY : spirv-tools-spv-amd-shader-explicit-vertex-parameter + +# clean rule for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/SPIRV-Tools-shared.dir + +# All Build rule for target. +source/CMakeFiles/SPIRV-Tools-shared.dir/all: + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/depend + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89 "Built target SPIRV-Tools-shared" +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/all + +# Include target in all. +all: source/CMakeFiles/SPIRV-Tools-shared.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +source/CMakeFiles/SPIRV-Tools-shared.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 29 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/SPIRV-Tools-shared.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/rule + +# Convenience name for target. +SPIRV-Tools-shared: source/CMakeFiles/SPIRV-Tools-shared.dir/rule + +.PHONY : SPIRV-Tools-shared + +# clean rule for target. +source/CMakeFiles/SPIRV-Tools-shared.dir/clean: + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/clean +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/SPIRV-Tools-shared.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target source/CMakeFiles/spirv-tools-vimsyntax.dir + +# All Build rule for target. +source/CMakeFiles/spirv-tools-vimsyntax.dir/all: + $(MAKE) -f source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make source/CMakeFiles/spirv-tools-vimsyntax.dir/depend + $(MAKE) -f source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make source/CMakeFiles/spirv-tools-vimsyntax.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-tools-vimsyntax" +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/all + +# Build rule for subdir invocation for target. +source/CMakeFiles/spirv-tools-vimsyntax.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-vimsyntax.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/rule + +# Convenience name for target. +spirv-tools-vimsyntax: source/CMakeFiles/spirv-tools-vimsyntax.dir/rule + +.PHONY : spirv-tools-vimsyntax + +# clean rule for target. +source/CMakeFiles/spirv-tools-vimsyntax.dir/clean: + $(MAKE) -f source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make source/CMakeFiles/spirv-tools-vimsyntax.dir/clean +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/clean + +# clean rule for target. +clean: source/CMakeFiles/spirv-tools-vimsyntax.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory source/comp + +# Convenience name for "all" pass in the directory. +source/comp/all: + +.PHONY : source/comp/all + +# Convenience name for "clean" pass in the directory. +source/comp/clean: + +.PHONY : source/comp/clean + +# Convenience name for "preinstall" pass in the directory. +source/comp/preinstall: + +.PHONY : source/comp/preinstall + +#============================================================================= +# Directory level rules for directory source/opt + +# Convenience name for "all" pass in the directory. +source/opt/all: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + +.PHONY : source/opt/all + +# Convenience name for "clean" pass in the directory. +source/opt/clean: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean + +.PHONY : source/opt/clean + +# Convenience name for "preinstall" pass in the directory. +source/opt/preinstall: + +.PHONY : source/opt/preinstall + +#============================================================================= +# Target rules for target source/opt/CMakeFiles/SPIRV-Tools-opt.dir + +# All Build rule for target. +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60 "Built target SPIRV-Tools-opt" +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + +# Include target in all. +all: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 59 + $(MAKE) -f CMakeFiles/Makefile2 source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule + +# Convenience name for target. +SPIRV-Tools-opt: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule + +.PHONY : SPIRV-Tools-opt + +# clean rule for target. +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean: + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean + +# clean rule for target. +clean: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory source/link + +# Convenience name for "all" pass in the directory. +source/link/all: source/link/CMakeFiles/SPIRV-Tools-link.dir/all + +.PHONY : source/link/all + +# Convenience name for "clean" pass in the directory. +source/link/clean: source/link/CMakeFiles/SPIRV-Tools-link.dir/clean + +.PHONY : source/link/clean + +# Convenience name for "preinstall" pass in the directory. +source/link/preinstall: + +.PHONY : source/link/preinstall + +#============================================================================= +# Target rules for target source/link/CMakeFiles/SPIRV-Tools-link.dir + +# All Build rule for target. +source/link/CMakeFiles/SPIRV-Tools-link.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all +source/link/CMakeFiles/SPIRV-Tools-link.dir/all: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/depend + $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=29 "Built target SPIRV-Tools-link" +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/all + +# Include target in all. +all: source/link/CMakeFiles/SPIRV-Tools-link.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +source/link/CMakeFiles/SPIRV-Tools-link.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 60 + $(MAKE) -f CMakeFiles/Makefile2 source/link/CMakeFiles/SPIRV-Tools-link.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/rule + +# Convenience name for target. +SPIRV-Tools-link: source/link/CMakeFiles/SPIRV-Tools-link.dir/rule + +.PHONY : SPIRV-Tools-link + +# clean rule for target. +source/link/CMakeFiles/SPIRV-Tools-link.dir/clean: + $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/clean +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/clean + +# clean rule for target. +clean: source/link/CMakeFiles/SPIRV-Tools-link.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory tools + +# Convenience name for "all" pass in the directory. +tools/all: tools/CMakeFiles/spirv-cfg.dir/all +tools/all: tools/CMakeFiles/spirv-dis.dir/all +tools/all: tools/CMakeFiles/spirv-as.dir/all +tools/all: tools/CMakeFiles/spirv-val.dir/all +tools/all: tools/CMakeFiles/spirv-link.dir/all +tools/all: tools/CMakeFiles/spirv-opt.dir/all +tools/all: tools/CMakeFiles/spirv-stats.dir/all +tools/all: tools/lesspipe/all +tools/all: tools/emacs/all + +.PHONY : tools/all + +# Convenience name for "clean" pass in the directory. +tools/clean: tools/CMakeFiles/spirv-cfg.dir/clean +tools/clean: tools/CMakeFiles/spirv-dis.dir/clean +tools/clean: tools/CMakeFiles/spirv-as.dir/clean +tools/clean: tools/CMakeFiles/spirv-val.dir/clean +tools/clean: tools/CMakeFiles/spirv-link.dir/clean +tools/clean: tools/CMakeFiles/spirv-opt.dir/clean +tools/clean: tools/CMakeFiles/spirv-stats.dir/clean +tools/clean: tools/lesspipe/clean +tools/clean: tools/emacs/clean + +.PHONY : tools/clean + +# Convenience name for "preinstall" pass in the directory. +tools/preinstall: tools/lesspipe/preinstall +tools/preinstall: tools/emacs/preinstall + +.PHONY : tools/preinstall + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-cfg.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-cfg.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=90,91 "Built target spirv-cfg" +.PHONY : tools/CMakeFiles/spirv-cfg.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-cfg.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-cfg.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 30 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-cfg.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-cfg.dir/rule + +# Convenience name for target. +spirv-cfg: tools/CMakeFiles/spirv-cfg.dir/rule + +.PHONY : spirv-cfg + +# clean rule for target. +tools/CMakeFiles/spirv-cfg.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/clean +.PHONY : tools/CMakeFiles/spirv-cfg.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-cfg.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-dis.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-dis.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-dis" +.PHONY : tools/CMakeFiles/spirv-dis.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-dis.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-dis.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 28 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-dis.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-dis.dir/rule + +# Convenience name for target. +spirv-dis: tools/CMakeFiles/spirv-dis.dir/rule + +.PHONY : spirv-dis + +# clean rule for target. +tools/CMakeFiles/spirv-dis.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/clean +.PHONY : tools/CMakeFiles/spirv-dis.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-dis.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-as.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-as.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num= "Built target spirv-as" +.PHONY : tools/CMakeFiles/spirv-as.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-as.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-as.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 28 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-as.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-as.dir/rule + +# Convenience name for target. +spirv-as: tools/CMakeFiles/spirv-as.dir/rule + +.PHONY : spirv-as + +# clean rule for target. +tools/CMakeFiles/spirv-as.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/clean +.PHONY : tools/CMakeFiles/spirv-as.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-as.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-val.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-val.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=99,100 "Built target spirv-val" +.PHONY : tools/CMakeFiles/spirv-val.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-val.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-val.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 30 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-val.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-val.dir/rule + +# Convenience name for target. +spirv-val: tools/CMakeFiles/spirv-val.dir/rule + +.PHONY : spirv-val + +# clean rule for target. +tools/CMakeFiles/spirv-val.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/clean +.PHONY : tools/CMakeFiles/spirv-val.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-val.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-link.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-link.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all +tools/CMakeFiles/spirv-link.dir/all: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all +tools/CMakeFiles/spirv-link.dir/all: source/link/CMakeFiles/SPIRV-Tools-link.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=92 "Built target spirv-link" +.PHONY : tools/CMakeFiles/spirv-link.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-link.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-link.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 61 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-link.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-link.dir/rule + +# Convenience name for target. +spirv-link: tools/CMakeFiles/spirv-link.dir/rule + +.PHONY : spirv-link + +# clean rule for target. +tools/CMakeFiles/spirv-link.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/clean +.PHONY : tools/CMakeFiles/spirv-link.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-link.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-opt.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-opt.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all +tools/CMakeFiles/spirv-opt.dir/all: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=93 "Built target spirv-opt" +.PHONY : tools/CMakeFiles/spirv-opt.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-opt.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-opt.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 60 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-opt.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-opt.dir/rule + +# Convenience name for target. +spirv-opt: tools/CMakeFiles/spirv-opt.dir/rule + +.PHONY : spirv-opt + +# clean rule for target. +tools/CMakeFiles/spirv-opt.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/clean +.PHONY : tools/CMakeFiles/spirv-opt.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-opt.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target tools/CMakeFiles/spirv-stats.dir + +# All Build rule for target. +tools/CMakeFiles/spirv-stats.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/depend + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=94,95 "Built target spirv-stats" +.PHONY : tools/CMakeFiles/spirv-stats.dir/all + +# Include target in all. +all: tools/CMakeFiles/spirv-stats.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/spirv-stats.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 30 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-stats.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : tools/CMakeFiles/spirv-stats.dir/rule + +# Convenience name for target. +spirv-stats: tools/CMakeFiles/spirv-stats.dir/rule + +.PHONY : spirv-stats + +# clean rule for target. +tools/CMakeFiles/spirv-stats.dir/clean: + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/clean +.PHONY : tools/CMakeFiles/spirv-stats.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/spirv-stats.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory tools/lesspipe + +# Convenience name for "all" pass in the directory. +tools/lesspipe/all: + +.PHONY : tools/lesspipe/all + +# Convenience name for "clean" pass in the directory. +tools/lesspipe/clean: + +.PHONY : tools/lesspipe/clean + +# Convenience name for "preinstall" pass in the directory. +tools/lesspipe/preinstall: + +.PHONY : tools/lesspipe/preinstall + +#============================================================================= +# Directory level rules for directory tools/emacs + +# Convenience name for "all" pass in the directory. +tools/emacs/all: + +.PHONY : tools/emacs/all + +# Convenience name for "clean" pass in the directory. +tools/emacs/clean: + +.PHONY : tools/emacs/clean + +# Convenience name for "preinstall" pass in the directory. +tools/emacs/preinstall: + +.PHONY : tools/emacs/preinstall + +#============================================================================= +# Directory level rules for directory test + +# Convenience name for "all" pass in the directory. +test/all: test/comp/all +test/all: test/link/all +test/all: test/opt/all +test/all: test/stats/all +test/all: test/tools/all +test/all: test/util/all +test/all: test/val/all + +.PHONY : test/all + +# Convenience name for "clean" pass in the directory. +test/clean: test/comp/clean +test/clean: test/link/clean +test/clean: test/opt/clean +test/clean: test/stats/clean +test/clean: test/tools/clean +test/clean: test/util/clean +test/clean: test/val/clean + +.PHONY : test/clean + +# Convenience name for "preinstall" pass in the directory. +test/preinstall: test/comp/preinstall +test/preinstall: test/link/preinstall +test/preinstall: test/opt/preinstall +test/preinstall: test/stats/preinstall +test/preinstall: test/tools/preinstall +test/preinstall: test/util/preinstall +test/preinstall: test/val/preinstall + +.PHONY : test/preinstall + +#============================================================================= +# Directory level rules for directory test/comp + +# Convenience name for "all" pass in the directory. +test/comp/all: + +.PHONY : test/comp/all + +# Convenience name for "clean" pass in the directory. +test/comp/clean: + +.PHONY : test/comp/clean + +# Convenience name for "preinstall" pass in the directory. +test/comp/preinstall: + +.PHONY : test/comp/preinstall + +#============================================================================= +# Directory level rules for directory test/link + +# Convenience name for "all" pass in the directory. +test/link/all: + +.PHONY : test/link/all + +# Convenience name for "clean" pass in the directory. +test/link/clean: + +.PHONY : test/link/clean + +# Convenience name for "preinstall" pass in the directory. +test/link/preinstall: + +.PHONY : test/link/preinstall + +#============================================================================= +# Directory level rules for directory test/opt + +# Convenience name for "all" pass in the directory. +test/opt/all: test/opt/dominator_tree/all +test/opt/all: test/opt/loop_optimizations/all + +.PHONY : test/opt/all + +# Convenience name for "clean" pass in the directory. +test/opt/clean: test/opt/dominator_tree/clean +test/opt/clean: test/opt/loop_optimizations/clean + +.PHONY : test/opt/clean + +# Convenience name for "preinstall" pass in the directory. +test/opt/preinstall: test/opt/dominator_tree/preinstall +test/opt/preinstall: test/opt/loop_optimizations/preinstall + +.PHONY : test/opt/preinstall + +#============================================================================= +# Directory level rules for directory test/opt/dominator_tree + +# Convenience name for "all" pass in the directory. +test/opt/dominator_tree/all: + +.PHONY : test/opt/dominator_tree/all + +# Convenience name for "clean" pass in the directory. +test/opt/dominator_tree/clean: + +.PHONY : test/opt/dominator_tree/clean + +# Convenience name for "preinstall" pass in the directory. +test/opt/dominator_tree/preinstall: + +.PHONY : test/opt/dominator_tree/preinstall + +#============================================================================= +# Directory level rules for directory test/opt/loop_optimizations + +# Convenience name for "all" pass in the directory. +test/opt/loop_optimizations/all: + +.PHONY : test/opt/loop_optimizations/all + +# Convenience name for "clean" pass in the directory. +test/opt/loop_optimizations/clean: + +.PHONY : test/opt/loop_optimizations/clean + +# Convenience name for "preinstall" pass in the directory. +test/opt/loop_optimizations/preinstall: + +.PHONY : test/opt/loop_optimizations/preinstall + +#============================================================================= +# Directory level rules for directory test/stats + +# Convenience name for "all" pass in the directory. +test/stats/all: + +.PHONY : test/stats/all + +# Convenience name for "clean" pass in the directory. +test/stats/clean: + +.PHONY : test/stats/clean + +# Convenience name for "preinstall" pass in the directory. +test/stats/preinstall: + +.PHONY : test/stats/preinstall + +#============================================================================= +# Directory level rules for directory test/tools + +# Convenience name for "all" pass in the directory. +test/tools/all: test/tools/opt/all + +.PHONY : test/tools/all + +# Convenience name for "clean" pass in the directory. +test/tools/clean: test/tools/opt/clean + +.PHONY : test/tools/clean + +# Convenience name for "preinstall" pass in the directory. +test/tools/preinstall: test/tools/opt/preinstall + +.PHONY : test/tools/preinstall + +#============================================================================= +# Directory level rules for directory test/tools/opt + +# Convenience name for "all" pass in the directory. +test/tools/opt/all: + +.PHONY : test/tools/opt/all + +# Convenience name for "clean" pass in the directory. +test/tools/opt/clean: + +.PHONY : test/tools/opt/clean + +# Convenience name for "preinstall" pass in the directory. +test/tools/opt/preinstall: + +.PHONY : test/tools/opt/preinstall + +#============================================================================= +# Directory level rules for directory test/util + +# Convenience name for "all" pass in the directory. +test/util/all: + +.PHONY : test/util/all + +# Convenience name for "clean" pass in the directory. +test/util/clean: + +.PHONY : test/util/clean + +# Convenience name for "preinstall" pass in the directory. +test/util/preinstall: + +.PHONY : test/util/preinstall + +#============================================================================= +# Directory level rules for directory test/val + +# Convenience name for "all" pass in the directory. +test/val/all: + +.PHONY : test/val/all + +# Convenience name for "clean" pass in the directory. +test/val/clean: + +.PHONY : test/val/clean + +# Convenience name for "preinstall" pass in the directory. +test/val/preinstall: + +.PHONY : test/val/preinstall + +#============================================================================= +# Directory level rules for directory examples + +# Convenience name for "all" pass in the directory. +examples/all: examples/cpp-interface/all + +.PHONY : examples/all + +# Convenience name for "clean" pass in the directory. +examples/clean: examples/cpp-interface/clean + +.PHONY : examples/clean + +# Convenience name for "preinstall" pass in the directory. +examples/preinstall: examples/cpp-interface/preinstall + +.PHONY : examples/preinstall + +#============================================================================= +# Directory level rules for directory examples/cpp-interface + +# Convenience name for "all" pass in the directory. +examples/cpp-interface/all: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/all + +.PHONY : examples/cpp-interface/all + +# Convenience name for "clean" pass in the directory. +examples/cpp-interface/clean: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean + +.PHONY : examples/cpp-interface/clean + +# Convenience name for "preinstall" pass in the directory. +examples/cpp-interface/preinstall: + +.PHONY : examples/cpp-interface/preinstall + +#============================================================================= +# Target rules for target examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir + +# All Build rule for target. +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/all: source/CMakeFiles/SPIRV-Tools.dir/all +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/all: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/all + $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend + $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=96 "Built target spirv-tools-cpp-example" +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/all + +# Include target in all. +all: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 60 + $(MAKE) -f CMakeFiles/Makefile2 examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule + +# Convenience name for target. +spirv-tools-cpp-example: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule + +.PHONY : spirv-tools-cpp-example + +# clean rule for target. +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean: + $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean + +# clean rule for target. +clean: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/1 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/1 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/1 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/2 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/2 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/2 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/3 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/3 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/3 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/4 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/4 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/4 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/5 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/5 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/5 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/6 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/6 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/6 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/7 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/7 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/7 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/8 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/8 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/8 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/9 b/3rdparty/spirv-tools/build/CMakeFiles/Progress/9 new file mode 100644 index 000000000..7b4d68d70 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/9 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/Progress/count.txt b/3rdparty/spirv-tools/build/CMakeFiles/Progress/count.txt new file mode 100644 index 000000000..6529ff889 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/Progress/count.txt @@ -0,0 +1 @@ +98 diff --git a/3rdparty/spirv-tools/build/CMakeFiles/TargetDirectories.txt b/3rdparty/spirv-tools/build/CMakeFiles/TargetDirectories.txt new file mode 100644 index 000000000..8c686956b --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,176 @@ +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/spirv-tools-pkg-config.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-build-version.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-cfg.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-dis.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-as.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-val.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-link.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-opt.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-stats.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/install/local.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/install.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/rebuild_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/install/strip.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/edit_cache.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/list_install_components.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/test.dir +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/install/local.dir diff --git a/3rdparty/spirv-tools/build/CMakeFiles/cmake.check_cache b/3rdparty/spirv-tools/build/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.bin b/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.bin new file mode 100755 index 000000000..96a9680a5 Binary files /dev/null and b/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.bin differ diff --git a/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.c b/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.c new file mode 100644 index 000000000..6590dded2 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.cxx b/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.cxx new file mode 100644 index 000000000..b93418c6e --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/feature_tests.cxx @@ -0,0 +1,405 @@ + + const char features[] = {"\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_aggregate_default_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alias_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignof\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_attributes\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_attribute_deprecated\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_auto_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_binary_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_contextual_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_decltype\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_decltype_auto\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_decltype_incomplete_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_default_function_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_move_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_delegating_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_deleted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_digit_separators\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_enum_forward_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_explicit_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extended_friend_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_extern_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_final\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_func_identifier\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_generalized_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_generic_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_inheriting_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_inline_namespaces\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_lambda_init_captures\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_local_type_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_long_long_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_noexcept\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_nonstatic_member_init\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_nullptr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_override\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_range_for\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_raw_string_literals\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_reference_qualified_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_relaxed_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_return_type_deduction\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_right_angle_brackets\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_rvalue_references\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_sizeof_member\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_static_assert\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_strong_enums\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus +"1" +#else +"0" +#endif +"cxx_template_template_parameters\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_thread_local\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_trailing_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unicode_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_uniform_initialization\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unrestricted_unions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_user_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_variable_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_macros\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_templates\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/3rdparty/spirv-tools/build/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/CMakeFiles/progress.marks new file mode 100644 index 000000000..6529ff889 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +98 diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/build.make b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/build.make new file mode 100644 index 000000000..5c104e1ca --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/build.make @@ -0,0 +1,78 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-pkg-config. + +# Include the progress variables for this target. +include CMakeFiles/spirv-tools-pkg-config.dir/progress.make + +CMakeFiles/spirv-tools-pkg-config: ../CHANGES +CMakeFiles/spirv-tools-pkg-config: ../cmake/SPIRV-Tools.pc.in +CMakeFiles/spirv-tools-pkg-config: ../cmake/write_pkg_config.cmake + /usr/bin/cmake -DCHANGES_FILE=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/CHANGES -DTEMPLATE_FILE=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/cmake/SPIRV-Tools.pc.in -DOUT_FILE=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/SPIRV-Tools.pc -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_INCLUDEDIR=include -DSPIRV_LIBRARIES=-lSPIRV-Tools\ -lSPIRV-Tools-link\ -lSPIRV-Tools-opt -P /home/bkaradzic/Private/projects/_github/SPIRV-Tools/cmake/write_pkg_config.cmake + +spirv-tools-pkg-config: CMakeFiles/spirv-tools-pkg-config +spirv-tools-pkg-config: CMakeFiles/spirv-tools-pkg-config.dir/build.make + +.PHONY : spirv-tools-pkg-config + +# Rule to build all files generated by this target. +CMakeFiles/spirv-tools-pkg-config.dir/build: spirv-tools-pkg-config + +.PHONY : CMakeFiles/spirv-tools-pkg-config.dir/build + +CMakeFiles/spirv-tools-pkg-config.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-pkg-config.dir/cmake_clean.cmake +.PHONY : CMakeFiles/spirv-tools-pkg-config.dir/clean + +CMakeFiles/spirv-tools-pkg-config.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/spirv-tools-pkg-config.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/spirv-tools-pkg-config.dir/depend + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/cmake_clean.cmake new file mode 100644 index 000000000..154f139e2 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-pkg-config" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-pkg-config.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/depend.internal b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/depend.internal new file mode 100644 index 000000000..d827cd848 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/depend.internal @@ -0,0 +1,3 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/depend.make b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/depend.make new file mode 100644 index 000000000..d827cd848 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/depend.make @@ -0,0 +1,3 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/progress.make b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/progress.make new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-pkg-config.dir/progress.make @@ -0,0 +1 @@ + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make new file mode 100644 index 000000000..f6123abb5 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make @@ -0,0 +1,78 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-shared-pkg-config. + +# Include the progress variables for this target. +include CMakeFiles/spirv-tools-shared-pkg-config.dir/progress.make + +CMakeFiles/spirv-tools-shared-pkg-config: ../CHANGES +CMakeFiles/spirv-tools-shared-pkg-config: ../cmake/SPIRV-Tools-shared.pc.in +CMakeFiles/spirv-tools-shared-pkg-config: ../cmake/write_pkg_config.cmake + /usr/bin/cmake -DCHANGES_FILE=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/CHANGES -DTEMPLATE_FILE=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/cmake/SPIRV-Tools-shared.pc.in -DOUT_FILE=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/SPIRV-Tools-shared.pc -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_INCLUDEDIR=include -DSPIRV_SHARED_LIBRARIES=-lSPIRV-Tools-shared -P /home/bkaradzic/Private/projects/_github/SPIRV-Tools/cmake/write_pkg_config.cmake + +spirv-tools-shared-pkg-config: CMakeFiles/spirv-tools-shared-pkg-config +spirv-tools-shared-pkg-config: CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make + +.PHONY : spirv-tools-shared-pkg-config + +# Rule to build all files generated by this target. +CMakeFiles/spirv-tools-shared-pkg-config.dir/build: spirv-tools-shared-pkg-config + +.PHONY : CMakeFiles/spirv-tools-shared-pkg-config.dir/build + +CMakeFiles/spirv-tools-shared-pkg-config.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-shared-pkg-config.dir/cmake_clean.cmake +.PHONY : CMakeFiles/spirv-tools-shared-pkg-config.dir/clean + +CMakeFiles/spirv-tools-shared-pkg-config.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/spirv-tools-shared-pkg-config.dir/depend + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/cmake_clean.cmake new file mode 100644 index 000000000..a172748be --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-shared-pkg-config" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-shared-pkg-config.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/depend.internal b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/depend.internal new file mode 100644 index 000000000..d827cd848 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/depend.internal @@ -0,0 +1,3 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/depend.make b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/depend.make new file mode 100644 index 000000000..d827cd848 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/depend.make @@ -0,0 +1,3 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + diff --git a/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/progress.make b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/progress.make new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/3rdparty/spirv-tools/build/CMakeFiles/spirv-tools-shared-pkg-config.dir/progress.make @@ -0,0 +1 @@ + diff --git a/3rdparty/spirv-tools/build/CTestTestfile.cmake b/3rdparty/spirv-tools/build/CTestTestfile.cmake new file mode 100644 index 000000000..78fa07154 --- /dev/null +++ b/3rdparty/spirv-tools/build/CTestTestfile.cmake @@ -0,0 +1,13 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(spirv-tools-copyrights "/usr/bin/python" "utils/check_copyright.py") +set_tests_properties(spirv-tools-copyrights PROPERTIES WORKING_DIRECTORY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +subdirs(external) +subdirs(source) +subdirs(tools) +subdirs(test) +subdirs(examples) diff --git a/3rdparty/spirv-tools/build/DebugInfo.h b/3rdparty/spirv-tools/build/DebugInfo.h new file mode 100644 index 000000000..9639ea107 --- /dev/null +++ b/3rdparty/spirv-tools/build/DebugInfo.h @@ -0,0 +1,137 @@ +// Copyright (c) 2017 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +#ifndef SPIRV_EXTINST_DebugInfo_H_ +#define SPIRV_EXTINST_DebugInfo_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum { DebugInfoVersion = 100, DebugInfoVersion_BitWidthPadding = 0x7fffffff }; +enum { DebugInfoRevision = 1, DebugInfoRevision_BitWidthPadding = 0x7fffffff }; + +enum DebugInfoInstructions { + DebugInfoDebugInfoNone = 0, + DebugInfoDebugCompilationUnit = 1, + DebugInfoDebugTypeBasic = 2, + DebugInfoDebugTypePointer = 3, + DebugInfoDebugTypeQualifier = 4, + DebugInfoDebugTypeArray = 5, + DebugInfoDebugTypeVector = 6, + DebugInfoDebugTypedef = 7, + DebugInfoDebugTypeFunction = 8, + DebugInfoDebugTypeEnum = 9, + DebugInfoDebugTypeComposite = 10, + DebugInfoDebugTypeMember = 11, + DebugInfoDebugTypeInheritance = 12, + DebugInfoDebugTypePtrToMember = 13, + DebugInfoDebugTypeTemplate = 14, + DebugInfoDebugTypeTemplateParameter = 15, + DebugInfoDebugTypeTemplateTemplateParameter = 16, + DebugInfoDebugTypeTemplateParameterPack = 17, + DebugInfoDebugGlobalVariable = 18, + DebugInfoDebugFunctionDeclaration = 19, + DebugInfoDebugFunction = 20, + DebugInfoDebugLexicalBlock = 21, + DebugInfoDebugLexicalBlockDiscriminator = 22, + DebugInfoDebugScope = 23, + DebugInfoDebugNoScope = 24, + DebugInfoDebugInlinedAt = 25, + DebugInfoDebugLocalVariable = 26, + DebugInfoDebugInlinedVariable = 27, + DebugInfoDebugDeclare = 28, + DebugInfoDebugValue = 29, + DebugInfoDebugOperation = 30, + DebugInfoDebugExpression = 31, + DebugInfoDebugMacroDef = 32, + DebugInfoDebugMacroUndef = 33, + DebugInfoInstructionsMax = 0x7ffffff +}; + + +enum DebugInfoDebugInfoFlags { + DebugInfoFlagIsProtected = 0x01, + DebugInfoFlagIsPrivate = 0x02, + DebugInfoFlagIsPublic = 0x03, + DebugInfoFlagIsLocal = 0x04, + DebugInfoFlagIsDefinition = 0x08, + DebugInfoFlagFwdDecl = 0x10, + DebugInfoFlagArtificial = 0x20, + DebugInfoFlagExplicit = 0x40, + DebugInfoFlagPrototyped = 0x80, + DebugInfoFlagObjectPointer = 0x100, + DebugInfoFlagStaticMember = 0x200, + DebugInfoFlagIndirectVariable = 0x400, + DebugInfoFlagLValueReference = 0x800, + DebugInfoFlagRValueReference = 0x1000, + DebugInfoFlagIsOptimized = 0x2000, + DebugInfoDebugInfoFlagsMax = 0x7ffffff +}; + +enum DebugInfoDebugBaseTypeAttributeEncoding { + DebugInfoUnspecified = 0, + DebugInfoAddress = 1, + DebugInfoBoolean = 2, + DebugInfoFloat = 4, + DebugInfoSigned = 5, + DebugInfoSignedChar = 6, + DebugInfoUnsigned = 7, + DebugInfoUnsignedChar = 8, + DebugInfoDebugBaseTypeAttributeEncodingMax = 0x7ffffff +}; + +enum DebugInfoDebugCompositeType { + DebugInfoClass = 0, + DebugInfoStructure = 1, + DebugInfoUnion = 2, + DebugInfoDebugCompositeTypeMax = 0x7ffffff +}; + +enum DebugInfoDebugTypeQualifier { + DebugInfoConstType = 0, + DebugInfoVolatileType = 1, + DebugInfoRestrictType = 2, + DebugInfoDebugTypeQualifierMax = 0x7ffffff +}; + +enum DebugInfoDebugOperation { + DebugInfoDeref = 0, + DebugInfoPlus = 1, + DebugInfoMinus = 2, + DebugInfoPlusUconst = 3, + DebugInfoBitPiece = 4, + DebugInfoSwap = 5, + DebugInfoXderef = 6, + DebugInfoStackValue = 7, + DebugInfoConstu = 8, + DebugInfoDebugOperationMax = 0x7ffffff +}; + + +#ifdef __cplusplus +} +#endif + +#endif // SPIRV_EXTINST_DebugInfo_H_ diff --git a/3rdparty/spirv-tools/build/Makefile b/3rdparty/spirv-tools/build/Makefile new file mode 100644 index 000000000..869168b18 --- /dev/null +++ b/3rdparty/spirv-tools/build/Makefile @@ -0,0 +1,502 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named spirv-tools-shared-pkg-config + +# Build rule for target. +spirv-tools-shared-pkg-config: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-shared-pkg-config +.PHONY : spirv-tools-shared-pkg-config + +# fast build rule for target. +spirv-tools-shared-pkg-config/fast: + $(MAKE) -f CMakeFiles/spirv-tools-shared-pkg-config.dir/build.make CMakeFiles/spirv-tools-shared-pkg-config.dir/build +.PHONY : spirv-tools-shared-pkg-config/fast + +#============================================================================= +# Target rules for targets named spirv-tools-pkg-config + +# Build rule for target. +spirv-tools-pkg-config: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-pkg-config +.PHONY : spirv-tools-pkg-config + +# fast build rule for target. +spirv-tools-pkg-config/fast: + $(MAKE) -f CMakeFiles/spirv-tools-pkg-config.dir/build.make CMakeFiles/spirv-tools-pkg-config.dir/build +.PHONY : spirv-tools-pkg-config/fast + +#============================================================================= +# Target rules for targets named spirv-tools-debuginfo + +# Build rule for target. +spirv-tools-debuginfo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-debuginfo +.PHONY : spirv-tools-debuginfo + +# fast build rule for target. +spirv-tools-debuginfo/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-debuginfo.dir/build.make source/CMakeFiles/spirv-tools-debuginfo.dir/build +.PHONY : spirv-tools-debuginfo/fast + +#============================================================================= +# Target rules for targets named spirv-tools-spv-amd-shader-ballot + +# Build rule for target. +spirv-tools-spv-amd-shader-ballot: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-spv-amd-shader-ballot +.PHONY : spirv-tools-spv-amd-shader-ballot + +# fast build rule for target. +spirv-tools-spv-amd-shader-ballot/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build +.PHONY : spirv-tools-spv-amd-shader-ballot/fast + +#============================================================================= +# Target rules for targets named spirv-tools-spv-amd-shader-trinary-minmax + +# Build rule for target. +spirv-tools-spv-amd-shader-trinary-minmax: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-spv-amd-shader-trinary-minmax +.PHONY : spirv-tools-spv-amd-shader-trinary-minmax + +# fast build rule for target. +spirv-tools-spv-amd-shader-trinary-minmax/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build +.PHONY : spirv-tools-spv-amd-shader-trinary-minmax/fast + +#============================================================================= +# Target rules for targets named spirv-tools-spv-amd-gcn-shader + +# Build rule for target. +spirv-tools-spv-amd-gcn-shader: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-spv-amd-gcn-shader +.PHONY : spirv-tools-spv-amd-gcn-shader + +# fast build rule for target. +spirv-tools-spv-amd-gcn-shader/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build +.PHONY : spirv-tools-spv-amd-gcn-shader/fast + +#============================================================================= +# Target rules for targets named spirv-tools-header-DebugInfo + +# Build rule for target. +spirv-tools-header-DebugInfo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-header-DebugInfo +.PHONY : spirv-tools-header-DebugInfo + +# fast build rule for target. +spirv-tools-header-DebugInfo/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build +.PHONY : spirv-tools-header-DebugInfo/fast + +#============================================================================= +# Target rules for targets named spirv-tools-build-version + +# Build rule for target. +spirv-tools-build-version: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-build-version +.PHONY : spirv-tools-build-version + +# fast build rule for target. +spirv-tools-build-version/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-build-version.dir/build.make source/CMakeFiles/spirv-tools-build-version.dir/build +.PHONY : spirv-tools-build-version/fast + +#============================================================================= +# Target rules for targets named SPIRV-Tools + +# Build rule for target. +SPIRV-Tools: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SPIRV-Tools +.PHONY : SPIRV-Tools + +# fast build rule for target. +SPIRV-Tools/fast: + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/build +.PHONY : SPIRV-Tools/fast + +#============================================================================= +# Target rules for targets named spirv-tools-spv-amd-shader-explicit-vertex-parameter + +# Build rule for target. +spirv-tools-spv-amd-shader-explicit-vertex-parameter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-spv-amd-shader-explicit-vertex-parameter +.PHONY : spirv-tools-spv-amd-shader-explicit-vertex-parameter + +# fast build rule for target. +spirv-tools-spv-amd-shader-explicit-vertex-parameter/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build +.PHONY : spirv-tools-spv-amd-shader-explicit-vertex-parameter/fast + +#============================================================================= +# Target rules for targets named SPIRV-Tools-shared + +# Build rule for target. +SPIRV-Tools-shared: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SPIRV-Tools-shared +.PHONY : SPIRV-Tools-shared + +# fast build rule for target. +SPIRV-Tools-shared/fast: + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/build +.PHONY : SPIRV-Tools-shared/fast + +#============================================================================= +# Target rules for targets named spirv-tools-vimsyntax + +# Build rule for target. +spirv-tools-vimsyntax: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-vimsyntax +.PHONY : spirv-tools-vimsyntax + +# fast build rule for target. +spirv-tools-vimsyntax/fast: + $(MAKE) -f source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make source/CMakeFiles/spirv-tools-vimsyntax.dir/build +.PHONY : spirv-tools-vimsyntax/fast + +#============================================================================= +# Target rules for targets named SPIRV-Tools-opt + +# Build rule for target. +SPIRV-Tools-opt: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SPIRV-Tools-opt +.PHONY : SPIRV-Tools-opt + +# fast build rule for target. +SPIRV-Tools-opt/fast: + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build +.PHONY : SPIRV-Tools-opt/fast + +#============================================================================= +# Target rules for targets named SPIRV-Tools-link + +# Build rule for target. +SPIRV-Tools-link: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SPIRV-Tools-link +.PHONY : SPIRV-Tools-link + +# fast build rule for target. +SPIRV-Tools-link/fast: + $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/build +.PHONY : SPIRV-Tools-link/fast + +#============================================================================= +# Target rules for targets named spirv-cfg + +# Build rule for target. +spirv-cfg: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-cfg +.PHONY : spirv-cfg + +# fast build rule for target. +spirv-cfg/fast: + $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/build +.PHONY : spirv-cfg/fast + +#============================================================================= +# Target rules for targets named spirv-dis + +# Build rule for target. +spirv-dis: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-dis +.PHONY : spirv-dis + +# fast build rule for target. +spirv-dis/fast: + $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/build +.PHONY : spirv-dis/fast + +#============================================================================= +# Target rules for targets named spirv-as + +# Build rule for target. +spirv-as: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-as +.PHONY : spirv-as + +# fast build rule for target. +spirv-as/fast: + $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/build +.PHONY : spirv-as/fast + +#============================================================================= +# Target rules for targets named spirv-val + +# Build rule for target. +spirv-val: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-val +.PHONY : spirv-val + +# fast build rule for target. +spirv-val/fast: + $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/build +.PHONY : spirv-val/fast + +#============================================================================= +# Target rules for targets named spirv-link + +# Build rule for target. +spirv-link: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-link +.PHONY : spirv-link + +# fast build rule for target. +spirv-link/fast: + $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/build +.PHONY : spirv-link/fast + +#============================================================================= +# Target rules for targets named spirv-opt + +# Build rule for target. +spirv-opt: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-opt +.PHONY : spirv-opt + +# fast build rule for target. +spirv-opt/fast: + $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/build +.PHONY : spirv-opt/fast + +#============================================================================= +# Target rules for targets named spirv-stats + +# Build rule for target. +spirv-stats: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-stats +.PHONY : spirv-stats + +# fast build rule for target. +spirv-stats/fast: + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/build +.PHONY : spirv-stats/fast + +#============================================================================= +# Target rules for targets named spirv-tools-cpp-example + +# Build rule for target. +spirv-tools-cpp-example: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spirv-tools-cpp-example +.PHONY : spirv-tools-cpp-example + +# fast build rule for target. +spirv-tools-cpp-example/fast: + $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build +.PHONY : spirv-tools-cpp-example/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... rebuild_cache" + @echo "... spirv-tools-shared-pkg-config" + @echo "... edit_cache" + @echo "... spirv-tools-pkg-config" + @echo "... list_install_components" + @echo "... install/local" + @echo "... test" + @echo "... install/strip" + @echo "... spirv-tools-debuginfo" + @echo "... spirv-tools-spv-amd-shader-ballot" + @echo "... spirv-tools-spv-amd-shader-trinary-minmax" + @echo "... spirv-tools-spv-amd-gcn-shader" + @echo "... spirv-tools-header-DebugInfo" + @echo "... spirv-tools-build-version" + @echo "... SPIRV-Tools" + @echo "... spirv-tools-spv-amd-shader-explicit-vertex-parameter" + @echo "... SPIRV-Tools-shared" + @echo "... spirv-tools-vimsyntax" + @echo "... SPIRV-Tools-opt" + @echo "... SPIRV-Tools-link" + @echo "... spirv-cfg" + @echo "... spirv-dis" + @echo "... spirv-as" + @echo "... spirv-val" + @echo "... spirv-link" + @echo "... spirv-opt" + @echo "... spirv-stats" + @echo "... spirv-tools-cpp-example" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/SPIRV-Tools-shared.pc b/3rdparty/spirv-tools/build/SPIRV-Tools-shared.pc new file mode 100644 index 000000000..e6d734f45 --- /dev/null +++ b/3rdparty/spirv-tools/build/SPIRV-Tools-shared.pc @@ -0,0 +1,12 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: SPIRV-Tools +Description: Tools for SPIR-V +Version: 2018.6.0 +URL: https://github.com/KhronosGroup/SPIRV-Tools + +Libs: -L${libdir} -lSPIRV-Tools-shared +Cflags: -I${includedir} diff --git a/3rdparty/spirv-tools/build/SPIRV-Tools.pc b/3rdparty/spirv-tools/build/SPIRV-Tools.pc new file mode 100644 index 000000000..79f0f0a14 --- /dev/null +++ b/3rdparty/spirv-tools/build/SPIRV-Tools.pc @@ -0,0 +1,12 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: SPIRV-Tools +Description: Tools for SPIR-V +Version: 2018.6.0 +URL: https://github.com/KhronosGroup/SPIRV-Tools + +Libs: -L${libdir} -lSPIRV-Tools -lSPIRV-Tools-link -lSPIRV-Tools-opt +Cflags: -I${includedir} diff --git a/3rdparty/spirv-tools/build/build-version.inc b/3rdparty/spirv-tools/build/build-version.inc new file mode 100644 index 000000000..a7fe36a5e --- /dev/null +++ b/3rdparty/spirv-tools/build/build-version.inc @@ -0,0 +1 @@ +"v2018.6-dev", "SPIRV-Tools v2018.6-dev v2018.5-62-g5bc3078" diff --git a/3rdparty/spirv-tools/build/cmake_install.cmake b/3rdparty/spirv-tools/build/cmake_install.cmake new file mode 100644 index 000000000..ba9b6c47d --- /dev/null +++ b/3rdparty/spirv-tools/build/cmake_install.cmake @@ -0,0 +1,70 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/spirv-tools" TYPE FILE FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include/spirv-tools/libspirv.h" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include/spirv-tools/libspirv.hpp" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include/spirv-tools/optimizer.hpp" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include/spirv-tools/linker.hpp" + ) +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/SPIRV-Tools.pc" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/SPIRV-Tools-shared.pc" + ) +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cmake_install.cmake") + +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/3rdparty/spirv-tools/build/core.insts-unified1.inc b/3rdparty/spirv-tools/build/core.insts-unified1.inc new file mode 100644 index 000000000..e7e16db6b --- /dev/null +++ b/3rdparty/spirv-tools/build/core.insts-unified1.inc @@ -0,0 +1,410 @@ +static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddresses}; +static const SpvCapability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBuffer[] = {SpvCapabilityAddresses, SpvCapabilityVariablePointers, SpvCapabilityVariablePointersStorageBuffer}; +static const SpvCapability pygen_variable_caps_DerivativeControl[] = {SpvCapabilityDerivativeControl}; +static const SpvCapability pygen_variable_caps_DeviceEnqueue[] = {SpvCapabilityDeviceEnqueue}; +static const SpvCapability pygen_variable_caps_FragmentMaskAMD[] = {SpvCapabilityFragmentMaskAMD}; +static const SpvCapability pygen_variable_caps_Geometry[] = {SpvCapabilityGeometry}; +static const SpvCapability pygen_variable_caps_GeometryStreams[] = {SpvCapabilityGeometryStreams}; +static const SpvCapability pygen_variable_caps_GroupNonUniform[] = {SpvCapabilityGroupNonUniform}; +static const SpvCapability pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered[] = {SpvCapabilityGroupNonUniformArithmetic, SpvCapabilityGroupNonUniformClustered}; +static const SpvCapability pygen_variable_caps_GroupNonUniformBallot[] = {SpvCapabilityGroupNonUniformBallot}; +static const SpvCapability pygen_variable_caps_GroupNonUniformPartitionedNV[] = {SpvCapabilityGroupNonUniformPartitionedNV}; +static const SpvCapability pygen_variable_caps_GroupNonUniformQuad[] = {SpvCapabilityGroupNonUniformQuad}; +static const SpvCapability pygen_variable_caps_GroupNonUniformShuffle[] = {SpvCapabilityGroupNonUniformShuffle}; +static const SpvCapability pygen_variable_caps_GroupNonUniformShuffleRelative[] = {SpvCapabilityGroupNonUniformShuffleRelative}; +static const SpvCapability pygen_variable_caps_GroupNonUniformVote[] = {SpvCapabilityGroupNonUniformVote}; +static const SpvCapability pygen_variable_caps_Groups[] = {SpvCapabilityGroups}; +static const SpvCapability pygen_variable_caps_ImageQuery[] = {SpvCapabilityImageQuery}; +static const SpvCapability pygen_variable_caps_Kernel[] = {SpvCapabilityKernel}; +static const SpvCapability pygen_variable_caps_KernelImageQuery[] = {SpvCapabilityKernel, SpvCapabilityImageQuery}; +static const SpvCapability pygen_variable_caps_LiteralSampler[] = {SpvCapabilityLiteralSampler}; +static const SpvCapability pygen_variable_caps_Matrix[] = {SpvCapabilityMatrix}; +static const SpvCapability pygen_variable_caps_NamedBarrier[] = {SpvCapabilityNamedBarrier}; +static const SpvCapability pygen_variable_caps_PipeStorage[] = {SpvCapabilityPipeStorage}; +static const SpvCapability pygen_variable_caps_Pipes[] = {SpvCapabilityPipes}; +static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader}; +static const SpvCapability pygen_variable_caps_SparseResidency[] = {SpvCapabilitySparseResidency}; +static const SpvCapability pygen_variable_caps_SubgroupBallotKHR[] = {SpvCapabilitySubgroupBallotKHR}; +static const SpvCapability pygen_variable_caps_SubgroupBufferBlockIOINTEL[] = {SpvCapabilitySubgroupBufferBlockIOINTEL}; +static const SpvCapability pygen_variable_caps_SubgroupDispatch[] = {SpvCapabilitySubgroupDispatch}; +static const SpvCapability pygen_variable_caps_SubgroupImageBlockIOINTEL[] = {SpvCapabilitySubgroupImageBlockIOINTEL}; +static const SpvCapability pygen_variable_caps_SubgroupShuffleINTEL[] = {SpvCapabilitySubgroupShuffleINTEL}; +static const SpvCapability pygen_variable_caps_SubgroupVoteKHR[] = {SpvCapabilitySubgroupVoteKHR}; + +static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_ballot[] = {spvtools::Extension::kSPV_AMD_shader_ballot}; +static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_fragment_mask[] = {spvtools::Extension::kSPV_AMD_shader_fragment_mask}; +static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_decorate_stringSPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_decorate_string, spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1}; +static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_ballot[] = {spvtools::Extension::kSPV_KHR_shader_ballot}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_vote[] = {spvtools::Extension::kSPV_KHR_subgroup_vote}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_subgroup_partitioned[] = {spvtools::Extension::kSPV_NV_shader_subgroup_partitioned}; + +static const spv_opcode_desc_t kOpcodeTableEntries[] = { + {"Nop", SpvOpNop, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Undef", SpvOpUndef, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SourceContinued", SpvOpSourceContinued, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Source", SpvOpSource, 0, nullptr, 4, {SPV_OPERAND_TYPE_SOURCE_LANGUAGE, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SourceExtension", SpvOpSourceExtension, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Name", SpvOpName, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MemberName", SpvOpMemberName, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"String", SpvOpString, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Line", SpvOpLine, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Extension", SpvOpExtension, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ExtInstImport", SpvOpExtInstImport, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ExtInst", SpvOpExtInst, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MemoryModel", SpvOpMemoryModel, 0, nullptr, 2, {SPV_OPERAND_TYPE_ADDRESSING_MODEL, SPV_OPERAND_TYPE_MEMORY_MODEL}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EntryPoint", SpvOpEntryPoint, 0, nullptr, 4, {SPV_OPERAND_TYPE_EXECUTION_MODEL, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_STRING, SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ExecutionMode", SpvOpExecutionMode, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXECUTION_MODE}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Capability", SpvOpCapability, 0, nullptr, 1, {SPV_OPERAND_TYPE_CAPABILITY}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeVoid", SpvOpTypeVoid, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeBool", SpvOpTypeBool, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeInt", SpvOpTypeInt, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeFloat", SpvOpTypeFloat, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeVector", SpvOpTypeVector, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeMatrix", SpvOpTypeMatrix, 1, pygen_variable_caps_Matrix, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeImage", SpvOpTypeImage, 0, nullptr, 9, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DIMENSIONALITY, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT, SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeSampler", SpvOpTypeSampler, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeSampledImage", SpvOpTypeSampledImage, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeArray", SpvOpTypeArray, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeRuntimeArray", SpvOpTypeRuntimeArray, 1, pygen_variable_caps_Shader, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeStruct", SpvOpTypeStruct, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeOpaque", SpvOpTypeOpaque, 1, pygen_variable_caps_Kernel, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypePointer", SpvOpTypePointer, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_STORAGE_CLASS, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeFunction", SpvOpTypeFunction, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeEvent", SpvOpTypeEvent, 1, pygen_variable_caps_Kernel, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeDeviceEvent", SpvOpTypeDeviceEvent, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeReserveId", SpvOpTypeReserveId, 1, pygen_variable_caps_Pipes, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeQueue", SpvOpTypeQueue, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypePipe", SpvOpTypePipe, 1, pygen_variable_caps_Pipes, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeForwardPointer", SpvOpTypeForwardPointer, 1, pygen_variable_caps_Addresses, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_STORAGE_CLASS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstantTrue", SpvOpConstantTrue, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstantFalse", SpvOpConstantFalse, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Constant", SpvOpConstant, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstantComposite", SpvOpConstantComposite, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstantSampler", SpvOpConstantSampler, 1, pygen_variable_caps_LiteralSampler, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstantNull", SpvOpConstantNull, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpecConstantTrue", SpvOpSpecConstantTrue, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpecConstantFalse", SpvOpSpecConstantFalse, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpecConstant", SpvOpSpecConstant, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpecConstantComposite", SpvOpSpecConstantComposite, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpecConstantOp", SpvOpSpecConstantOp, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Function", SpvOpFunction, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_FUNCTION_CONTROL, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FunctionParameter", SpvOpFunctionParameter, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FunctionEnd", SpvOpFunctionEnd, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FunctionCall", SpvOpFunctionCall, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Variable", SpvOpVariable, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_STORAGE_CLASS, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageTexelPointer", SpvOpImageTexelPointer, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Load", SpvOpLoad, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Store", SpvOpStore, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CopyMemory", SpvOpCopyMemory, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CopyMemorySized", SpvOpCopyMemorySized, 1, pygen_variable_caps_Addresses, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AccessChain", SpvOpAccessChain, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InBoundsAccessChain", SpvOpInBoundsAccessChain, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PtrAccessChain", SpvOpPtrAccessChain, 3, pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBuffer, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ArrayLength", SpvOpArrayLength, 1, pygen_variable_caps_Shader, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GenericPtrMemSemantics", SpvOpGenericPtrMemSemantics, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InBoundsPtrAccessChain", SpvOpInBoundsPtrAccessChain, 1, pygen_variable_caps_Addresses, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Decorate", SpvOpDecorate, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MemberDecorate", SpvOpMemberDecorate, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DecorationGroup", SpvOpDecorationGroup, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupDecorate", SpvOpGroupDecorate, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupMemberDecorate", SpvOpGroupMemberDecorate, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VectorExtractDynamic", SpvOpVectorExtractDynamic, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VectorInsertDynamic", SpvOpVectorInsertDynamic, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VectorShuffle", SpvOpVectorShuffle, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CompositeConstruct", SpvOpCompositeConstruct, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CompositeExtract", SpvOpCompositeExtract, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CompositeInsert", SpvOpCompositeInsert, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CopyObject", SpvOpCopyObject, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Transpose", SpvOpTranspose, 1, pygen_variable_caps_Matrix, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampledImage", SpvOpSampledImage, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleImplicitLod", SpvOpImageSampleImplicitLod, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleExplicitLod", SpvOpImageSampleExplicitLod, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleDrefImplicitLod", SpvOpImageSampleDrefImplicitLod, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleDrefExplicitLod", SpvOpImageSampleDrefExplicitLod, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleProjImplicitLod", SpvOpImageSampleProjImplicitLod, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleProjExplicitLod", SpvOpImageSampleProjExplicitLod, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleProjDrefImplicitLod", SpvOpImageSampleProjDrefImplicitLod, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSampleProjDrefExplicitLod", SpvOpImageSampleProjDrefExplicitLod, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageFetch", SpvOpImageFetch, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageGather", SpvOpImageGather, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageDrefGather", SpvOpImageDrefGather, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageRead", SpvOpImageRead, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageWrite", SpvOpImageWrite, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Image", SpvOpImage, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQueryFormat", SpvOpImageQueryFormat, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQueryOrder", SpvOpImageQueryOrder, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQuerySizeLod", SpvOpImageQuerySizeLod, 2, pygen_variable_caps_KernelImageQuery, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQuerySize", SpvOpImageQuerySize, 2, pygen_variable_caps_KernelImageQuery, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQueryLod", SpvOpImageQueryLod, 1, pygen_variable_caps_ImageQuery, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQueryLevels", SpvOpImageQueryLevels, 2, pygen_variable_caps_KernelImageQuery, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQuerySamples", SpvOpImageQuerySamples, 2, pygen_variable_caps_KernelImageQuery, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConvertFToU", SpvOpConvertFToU, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConvertFToS", SpvOpConvertFToS, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConvertSToF", SpvOpConvertSToF, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConvertUToF", SpvOpConvertUToF, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UConvert", SpvOpUConvert, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SConvert", SpvOpSConvert, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FConvert", SpvOpFConvert, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"QuantizeToF16", SpvOpQuantizeToF16, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConvertPtrToU", SpvOpConvertPtrToU, 1, pygen_variable_caps_Addresses, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SatConvertSToU", SpvOpSatConvertSToU, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SatConvertUToS", SpvOpSatConvertUToS, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConvertUToPtr", SpvOpConvertUToPtr, 1, pygen_variable_caps_Addresses, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PtrCastToGeneric", SpvOpPtrCastToGeneric, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GenericCastToPtr", SpvOpGenericCastToPtr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GenericCastToPtrExplicit", SpvOpGenericCastToPtrExplicit, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_STORAGE_CLASS}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Bitcast", SpvOpBitcast, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SNegate", SpvOpSNegate, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FNegate", SpvOpFNegate, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IAdd", SpvOpIAdd, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FAdd", SpvOpFAdd, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ISub", SpvOpISub, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FSub", SpvOpFSub, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IMul", SpvOpIMul, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FMul", SpvOpFMul, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UDiv", SpvOpUDiv, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SDiv", SpvOpSDiv, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FDiv", SpvOpFDiv, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UMod", SpvOpUMod, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SRem", SpvOpSRem, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SMod", SpvOpSMod, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FRem", SpvOpFRem, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FMod", SpvOpFMod, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VectorTimesScalar", SpvOpVectorTimesScalar, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MatrixTimesScalar", SpvOpMatrixTimesScalar, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VectorTimesMatrix", SpvOpVectorTimesMatrix, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MatrixTimesVector", SpvOpMatrixTimesVector, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MatrixTimesMatrix", SpvOpMatrixTimesMatrix, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OuterProduct", SpvOpOuterProduct, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Dot", SpvOpDot, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IAddCarry", SpvOpIAddCarry, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ISubBorrow", SpvOpISubBorrow, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UMulExtended", SpvOpUMulExtended, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SMulExtended", SpvOpSMulExtended, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Any", SpvOpAny, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"All", SpvOpAll, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IsNan", SpvOpIsNan, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IsInf", SpvOpIsInf, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IsFinite", SpvOpIsFinite, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IsNormal", SpvOpIsNormal, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SignBitSet", SpvOpSignBitSet, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LessOrGreater", SpvOpLessOrGreater, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Ordered", SpvOpOrdered, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Unordered", SpvOpUnordered, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LogicalEqual", SpvOpLogicalEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LogicalNotEqual", SpvOpLogicalNotEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LogicalOr", SpvOpLogicalOr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LogicalAnd", SpvOpLogicalAnd, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LogicalNot", SpvOpLogicalNot, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Select", SpvOpSelect, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IEqual", SpvOpIEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"INotEqual", SpvOpINotEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UGreaterThan", SpvOpUGreaterThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SGreaterThan", SpvOpSGreaterThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UGreaterThanEqual", SpvOpUGreaterThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SGreaterThanEqual", SpvOpSGreaterThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ULessThan", SpvOpULessThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SLessThan", SpvOpSLessThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ULessThanEqual", SpvOpULessThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SLessThanEqual", SpvOpSLessThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FOrdEqual", SpvOpFOrdEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FUnordEqual", SpvOpFUnordEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FOrdNotEqual", SpvOpFOrdNotEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FUnordNotEqual", SpvOpFUnordNotEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FOrdLessThan", SpvOpFOrdLessThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FUnordLessThan", SpvOpFUnordLessThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FOrdGreaterThan", SpvOpFOrdGreaterThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FUnordGreaterThan", SpvOpFUnordGreaterThan, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FOrdLessThanEqual", SpvOpFOrdLessThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FUnordLessThanEqual", SpvOpFUnordLessThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FOrdGreaterThanEqual", SpvOpFOrdGreaterThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FUnordGreaterThanEqual", SpvOpFUnordGreaterThanEqual, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ShiftRightLogical", SpvOpShiftRightLogical, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ShiftRightArithmetic", SpvOpShiftRightArithmetic, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ShiftLeftLogical", SpvOpShiftLeftLogical, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitwiseOr", SpvOpBitwiseOr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitwiseXor", SpvOpBitwiseXor, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitwiseAnd", SpvOpBitwiseAnd, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Not", SpvOpNot, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitFieldInsert", SpvOpBitFieldInsert, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitFieldSExtract", SpvOpBitFieldSExtract, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitFieldUExtract", SpvOpBitFieldUExtract, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitReverse", SpvOpBitReverse, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitCount", SpvOpBitCount, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DPdx", SpvOpDPdx, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DPdy", SpvOpDPdy, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Fwidth", SpvOpFwidth, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DPdxFine", SpvOpDPdxFine, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DPdyFine", SpvOpDPdyFine, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FwidthFine", SpvOpFwidthFine, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DPdxCoarse", SpvOpDPdxCoarse, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DPdyCoarse", SpvOpDPdyCoarse, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FwidthCoarse", SpvOpFwidthCoarse, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EmitVertex", SpvOpEmitVertex, 1, pygen_variable_caps_Geometry, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EndPrimitive", SpvOpEndPrimitive, 1, pygen_variable_caps_Geometry, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EmitStreamVertex", SpvOpEmitStreamVertex, 1, pygen_variable_caps_GeometryStreams, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EndStreamPrimitive", SpvOpEndStreamPrimitive, 1, pygen_variable_caps_GeometryStreams, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ControlBarrier", SpvOpControlBarrier, 0, nullptr, 3, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MemoryBarrier", SpvOpMemoryBarrier, 0, nullptr, 2, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicLoad", SpvOpAtomicLoad, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicStore", SpvOpAtomicStore, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicExchange", SpvOpAtomicExchange, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicCompareExchange", SpvOpAtomicCompareExchange, 0, nullptr, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicCompareExchangeWeak", SpvOpAtomicCompareExchangeWeak, 1, pygen_variable_caps_Kernel, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicIIncrement", SpvOpAtomicIIncrement, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicIDecrement", SpvOpAtomicIDecrement, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicIAdd", SpvOpAtomicIAdd, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicISub", SpvOpAtomicISub, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicSMin", SpvOpAtomicSMin, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicUMin", SpvOpAtomicUMin, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicSMax", SpvOpAtomicSMax, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicUMax", SpvOpAtomicUMax, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicAnd", SpvOpAtomicAnd, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicOr", SpvOpAtomicOr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicXor", SpvOpAtomicXor, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Phi", SpvOpPhi, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LoopMerge", SpvOpLoopMerge, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LOOP_CONTROL}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SelectionMerge", SpvOpSelectionMerge, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SELECTION_CONTROL}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Label", SpvOpLabel, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Branch", SpvOpBranch, 0, nullptr, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BranchConditional", SpvOpBranchConditional, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Switch", SpvOpSwitch, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Kill", SpvOpKill, 1, pygen_variable_caps_Shader, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Return", SpvOpReturn, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReturnValue", SpvOpReturnValue, 0, nullptr, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Unreachable", SpvOpUnreachable, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LifetimeStart", SpvOpLifetimeStart, 1, pygen_variable_caps_Kernel, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LifetimeStop", SpvOpLifetimeStop, 1, pygen_variable_caps_Kernel, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupAsyncCopy", SpvOpGroupAsyncCopy, 1, pygen_variable_caps_Kernel, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupWaitEvents", SpvOpGroupWaitEvents, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupAll", SpvOpGroupAll, 1, pygen_variable_caps_Groups, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupAny", SpvOpGroupAny, 1, pygen_variable_caps_Groups, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupBroadcast", SpvOpGroupBroadcast, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupIAdd", SpvOpGroupIAdd, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupFAdd", SpvOpGroupFAdd, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupFMin", SpvOpGroupFMin, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupUMin", SpvOpGroupUMin, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupSMin", SpvOpGroupSMin, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupFMax", SpvOpGroupFMax, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupUMax", SpvOpGroupUMax, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupSMax", SpvOpGroupSMax, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReadPipe", SpvOpReadPipe, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WritePipe", SpvOpWritePipe, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReservedReadPipe", SpvOpReservedReadPipe, 1, pygen_variable_caps_Pipes, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReservedWritePipe", SpvOpReservedWritePipe, 1, pygen_variable_caps_Pipes, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReserveReadPipePackets", SpvOpReserveReadPipePackets, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReserveWritePipePackets", SpvOpReserveWritePipePackets, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CommitReadPipe", SpvOpCommitReadPipe, 1, pygen_variable_caps_Pipes, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CommitWritePipe", SpvOpCommitWritePipe, 1, pygen_variable_caps_Pipes, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IsValidReserveId", SpvOpIsValidReserveId, 1, pygen_variable_caps_Pipes, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetNumPipePackets", SpvOpGetNumPipePackets, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetMaxPipePackets", SpvOpGetMaxPipePackets, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupReserveReadPipePackets", SpvOpGroupReserveReadPipePackets, 1, pygen_variable_caps_Pipes, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupReserveWritePipePackets", SpvOpGroupReserveWritePipePackets, 1, pygen_variable_caps_Pipes, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupCommitReadPipe", SpvOpGroupCommitReadPipe, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GroupCommitWritePipe", SpvOpGroupCommitWritePipe, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EnqueueMarker", SpvOpEnqueueMarker, 1, pygen_variable_caps_DeviceEnqueue, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EnqueueKernel", SpvOpEnqueueKernel, 1, pygen_variable_caps_DeviceEnqueue, 13, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetKernelNDrangeSubGroupCount", SpvOpGetKernelNDrangeSubGroupCount, 1, pygen_variable_caps_DeviceEnqueue, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetKernelNDrangeMaxSubGroupSize", SpvOpGetKernelNDrangeMaxSubGroupSize, 1, pygen_variable_caps_DeviceEnqueue, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetKernelWorkGroupSize", SpvOpGetKernelWorkGroupSize, 1, pygen_variable_caps_DeviceEnqueue, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetKernelPreferredWorkGroupSizeMultiple", SpvOpGetKernelPreferredWorkGroupSizeMultiple, 1, pygen_variable_caps_DeviceEnqueue, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RetainEvent", SpvOpRetainEvent, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReleaseEvent", SpvOpReleaseEvent, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CreateUserEvent", SpvOpCreateUserEvent, 1, pygen_variable_caps_DeviceEnqueue, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IsValidEvent", SpvOpIsValidEvent, 1, pygen_variable_caps_DeviceEnqueue, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SetUserEventStatus", SpvOpSetUserEventStatus, 1, pygen_variable_caps_DeviceEnqueue, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CaptureEventProfilingInfo", SpvOpCaptureEventProfilingInfo, 1, pygen_variable_caps_DeviceEnqueue, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GetDefaultQueue", SpvOpGetDefaultQueue, 1, pygen_variable_caps_DeviceEnqueue, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BuildNDRange", SpvOpBuildNDRange, 1, pygen_variable_caps_DeviceEnqueue, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseSampleImplicitLod", SpvOpImageSparseSampleImplicitLod, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseSampleExplicitLod", SpvOpImageSparseSampleExplicitLod, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseSampleDrefImplicitLod", SpvOpImageSparseSampleDrefImplicitLod, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseSampleDrefExplicitLod", SpvOpImageSparseSampleDrefExplicitLod, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseSampleProjImplicitLod", SpvOpImageSparseSampleProjImplicitLod, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu}, + {"ImageSparseSampleProjExplicitLod", SpvOpImageSparseSampleProjExplicitLod, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu}, + {"ImageSparseSampleProjDrefImplicitLod", SpvOpImageSparseSampleProjDrefImplicitLod, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu}, + {"ImageSparseSampleProjDrefExplicitLod", SpvOpImageSparseSampleProjDrefExplicitLod, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu}, + {"ImageSparseFetch", SpvOpImageSparseFetch, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseGather", SpvOpImageSparseGather, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseDrefGather", SpvOpImageSparseDrefGather, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseTexelsResident", SpvOpImageSparseTexelsResident, 1, pygen_variable_caps_SparseResidency, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoLine", SpvOpNoLine, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicFlagTestAndSet", SpvOpAtomicFlagTestAndSet, 1, pygen_variable_caps_Kernel, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicFlagClear", SpvOpAtomicFlagClear, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageSparseRead", SpvOpImageSparseRead, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SizeOf", SpvOpSizeOf, 1, pygen_variable_caps_Addresses, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"TypePipeStorage", SpvOpTypePipeStorage, 1, pygen_variable_caps_PipeStorage, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"ConstantPipeStorage", SpvOpConstantPipeStorage, 1, pygen_variable_caps_PipeStorage, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"CreatePipeFromPipeStorage", SpvOpCreatePipeFromPipeStorage, 1, pygen_variable_caps_PipeStorage, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"GetKernelLocalSizeForSubgroupCount", SpvOpGetKernelLocalSizeForSubgroupCount, 1, pygen_variable_caps_SubgroupDispatch, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"GetKernelMaxNumSubgroups", SpvOpGetKernelMaxNumSubgroups, 1, pygen_variable_caps_SubgroupDispatch, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"TypeNamedBarrier", SpvOpTypeNamedBarrier, 1, pygen_variable_caps_NamedBarrier, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"NamedBarrierInitialize", SpvOpNamedBarrierInitialize, 1, pygen_variable_caps_NamedBarrier, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"MemoryNamedBarrier", SpvOpMemoryNamedBarrier, 1, pygen_variable_caps_NamedBarrier, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"ModuleProcessed", SpvOpModuleProcessed, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1)}, + {"ExecutionModeId", SpvOpExecutionModeId, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXECUTION_MODE}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,2)}, + {"DecorateId", SpvOpDecorateId, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 1, pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1, SPV_SPIRV_VERSION_WORD(1,2)}, + {"GroupNonUniformElect", SpvOpGroupNonUniformElect, 1, pygen_variable_caps_GroupNonUniform, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformAll", SpvOpGroupNonUniformAll, 1, pygen_variable_caps_GroupNonUniformVote, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformAny", SpvOpGroupNonUniformAny, 1, pygen_variable_caps_GroupNonUniformVote, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformAllEqual", SpvOpGroupNonUniformAllEqual, 1, pygen_variable_caps_GroupNonUniformVote, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBroadcast", SpvOpGroupNonUniformBroadcast, 1, pygen_variable_caps_GroupNonUniformBallot, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBroadcastFirst", SpvOpGroupNonUniformBroadcastFirst, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBallot", SpvOpGroupNonUniformBallot, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformInverseBallot", SpvOpGroupNonUniformInverseBallot, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBallotBitExtract", SpvOpGroupNonUniformBallotBitExtract, 1, pygen_variable_caps_GroupNonUniformBallot, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBallotBitCount", SpvOpGroupNonUniformBallotBitCount, 1, pygen_variable_caps_GroupNonUniformBallot, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBallotFindLSB", SpvOpGroupNonUniformBallotFindLSB, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBallotFindMSB", SpvOpGroupNonUniformBallotFindMSB, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformShuffle", SpvOpGroupNonUniformShuffle, 1, pygen_variable_caps_GroupNonUniformShuffle, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformShuffleXor", SpvOpGroupNonUniformShuffleXor, 1, pygen_variable_caps_GroupNonUniformShuffle, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformShuffleUp", SpvOpGroupNonUniformShuffleUp, 1, pygen_variable_caps_GroupNonUniformShuffleRelative, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformShuffleDown", SpvOpGroupNonUniformShuffleDown, 1, pygen_variable_caps_GroupNonUniformShuffleRelative, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformIAdd", SpvOpGroupNonUniformIAdd, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformFAdd", SpvOpGroupNonUniformFAdd, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformIMul", SpvOpGroupNonUniformIMul, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformFMul", SpvOpGroupNonUniformFMul, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformSMin", SpvOpGroupNonUniformSMin, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformUMin", SpvOpGroupNonUniformUMin, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformFMin", SpvOpGroupNonUniformFMin, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformSMax", SpvOpGroupNonUniformSMax, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformUMax", SpvOpGroupNonUniformUMax, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformFMax", SpvOpGroupNonUniformFMax, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBitwiseAnd", SpvOpGroupNonUniformBitwiseAnd, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBitwiseOr", SpvOpGroupNonUniformBitwiseOr, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBitwiseXor", SpvOpGroupNonUniformBitwiseXor, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformLogicalAnd", SpvOpGroupNonUniformLogicalAnd, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformLogicalOr", SpvOpGroupNonUniformLogicalOr, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformLogicalXor", SpvOpGroupNonUniformLogicalXor, 2, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClustered, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformQuadBroadcast", SpvOpGroupNonUniformQuadBroadcast, 1, pygen_variable_caps_GroupNonUniformQuad, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformQuadSwap", SpvOpGroupNonUniformQuadSwap, 1, pygen_variable_caps_GroupNonUniformQuad, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupBallotKHR", SpvOpSubgroupBallotKHR, 1, pygen_variable_caps_SubgroupBallotKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_shader_ballot, 0xffffffffu}, + {"SubgroupFirstInvocationKHR", SpvOpSubgroupFirstInvocationKHR, 1, pygen_variable_caps_SubgroupBallotKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_shader_ballot, 0xffffffffu}, + {"SubgroupAllKHR", SpvOpSubgroupAllKHR, 1, pygen_variable_caps_SubgroupVoteKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, 0xffffffffu}, + {"SubgroupAnyKHR", SpvOpSubgroupAnyKHR, 1, pygen_variable_caps_SubgroupVoteKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, 0xffffffffu}, + {"SubgroupAllEqualKHR", SpvOpSubgroupAllEqualKHR, 1, pygen_variable_caps_SubgroupVoteKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, 0xffffffffu}, + {"SubgroupReadInvocationKHR", SpvOpSubgroupReadInvocationKHR, 1, pygen_variable_caps_SubgroupBallotKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_shader_ballot, 0xffffffffu}, + {"GroupIAddNonUniformAMD", SpvOpGroupIAddNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupFAddNonUniformAMD", SpvOpGroupFAddNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupFMinNonUniformAMD", SpvOpGroupFMinNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupUMinNonUniformAMD", SpvOpGroupUMinNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupSMinNonUniformAMD", SpvOpGroupSMinNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupFMaxNonUniformAMD", SpvOpGroupFMaxNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupUMaxNonUniformAMD", SpvOpGroupUMaxNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"GroupSMaxNonUniformAMD", SpvOpGroupSMaxNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, + {"FragmentMaskFetchAMD", SpvOpFragmentMaskFetchAMD, 1, pygen_variable_caps_FragmentMaskAMD, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, 0xffffffffu}, + {"FragmentFetchAMD", SpvOpFragmentFetchAMD, 1, pygen_variable_caps_FragmentMaskAMD, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, 0xffffffffu}, + {"GroupNonUniformPartitionNV", SpvOpGroupNonUniformPartitionNV, 1, pygen_variable_caps_GroupNonUniformPartitionedNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, 0xffffffffu}, + {"SubgroupShuffleINTEL", SpvOpSubgroupShuffleINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, + {"SubgroupShuffleDownINTEL", SpvOpSubgroupShuffleDownINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, + {"SubgroupShuffleUpINTEL", SpvOpSubgroupShuffleUpINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, + {"SubgroupShuffleXorINTEL", SpvOpSubgroupShuffleXorINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, + {"SubgroupBlockReadINTEL", SpvOpSubgroupBlockReadINTEL, 1, pygen_variable_caps_SubgroupBufferBlockIOINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, + {"SubgroupBlockWriteINTEL", SpvOpSubgroupBlockWriteINTEL, 1, pygen_variable_caps_SubgroupBufferBlockIOINTEL, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu}, + {"SubgroupImageBlockReadINTEL", SpvOpSubgroupImageBlockReadINTEL, 1, pygen_variable_caps_SubgroupImageBlockIOINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, + {"SubgroupImageBlockWriteINTEL", SpvOpSubgroupImageBlockWriteINTEL, 1, pygen_variable_caps_SubgroupImageBlockIOINTEL, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu}, + {"DecorateStringGOOGLE", SpvOpDecorateStringGOOGLE, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 2, pygen_variable_exts_SPV_GOOGLE_decorate_stringSPV_GOOGLE_hlsl_functionality1, 0xffffffffu}, + {"MemberDecorateStringGOOGLE", SpvOpMemberDecorateStringGOOGLE, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 2, pygen_variable_exts_SPV_GOOGLE_decorate_stringSPV_GOOGLE_hlsl_functionality1, 0xffffffffu} +}; diff --git a/3rdparty/spirv-tools/build/debuginfo.insts.inc b/3rdparty/spirv-tools/build/debuginfo.insts.inc new file mode 100644 index 000000000..e28cc97d2 --- /dev/null +++ b/3rdparty/spirv-tools/build/debuginfo.insts.inc @@ -0,0 +1,38 @@ + + +static const spv_ext_inst_desc_t debuginfo_entries[] = { + {"DebugInfoNone", 0, 0, nullptr, {SPV_OPERAND_TYPE_NONE}}, + {"DebugCompilationUnit", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeBasic", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypePointer", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_STORAGE_CLASS, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeQualifier", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeArray", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeVector", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypedef", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeFunction", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeEnum", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeComposite", 10, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeMember", 11, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeInheritance", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypePtrToMember", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplate", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplateParameter", 15, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplateTemplateParameter", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplateParameterPack", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugGlobalVariable", 18, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugFunctionDeclaration", 19, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_NONE}}, + {"DebugFunction", 20, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugLexicalBlock", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugLexicalBlockDiscriminator", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugScope", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugNoScope", 24, 0, nullptr, {SPV_OPERAND_TYPE_NONE}}, + {"DebugInlinedAt", 25, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugLocalVariable", 26, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"DebugInlinedVariable", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugDeclare", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugValue", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugOperation", 30, 0, nullptr, {SPV_OPERAND_TYPE_DEBUG_OPERATION, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"DebugExpression", 31, 0, nullptr, {SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugMacroDef", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugMacroUndef", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/enum_string_mapping.inc b/3rdparty/spirv-tools/build/enum_string_mapping.inc new file mode 100644 index 000000000..964b142d9 --- /dev/null +++ b/3rdparty/spirv-tools/build/enum_string_mapping.inc @@ -0,0 +1,325 @@ +const char* ExtensionToString(Extension extension) { + switch (extension) { + case Extension::kSPV_AMD_gcn_shader: + return "SPV_AMD_gcn_shader"; + case Extension::kSPV_AMD_gpu_shader_half_float: + return "SPV_AMD_gpu_shader_half_float"; + case Extension::kSPV_AMD_gpu_shader_half_float_fetch: + return "SPV_AMD_gpu_shader_half_float_fetch"; + case Extension::kSPV_AMD_gpu_shader_int16: + return "SPV_AMD_gpu_shader_int16"; + case Extension::kSPV_AMD_shader_ballot: + return "SPV_AMD_shader_ballot"; + case Extension::kSPV_AMD_shader_explicit_vertex_parameter: + return "SPV_AMD_shader_explicit_vertex_parameter"; + case Extension::kSPV_AMD_shader_fragment_mask: + return "SPV_AMD_shader_fragment_mask"; + case Extension::kSPV_AMD_shader_image_load_store_lod: + return "SPV_AMD_shader_image_load_store_lod"; + case Extension::kSPV_AMD_shader_trinary_minmax: + return "SPV_AMD_shader_trinary_minmax"; + case Extension::kSPV_AMD_texture_gather_bias_lod: + return "SPV_AMD_texture_gather_bias_lod"; + case Extension::kSPV_EXT_descriptor_indexing: + return "SPV_EXT_descriptor_indexing"; + case Extension::kSPV_EXT_fragment_fully_covered: + return "SPV_EXT_fragment_fully_covered"; + case Extension::kSPV_EXT_shader_stencil_export: + return "SPV_EXT_shader_stencil_export"; + case Extension::kSPV_EXT_shader_viewport_index_layer: + return "SPV_EXT_shader_viewport_index_layer"; + case Extension::kSPV_GOOGLE_decorate_string: + return "SPV_GOOGLE_decorate_string"; + case Extension::kSPV_GOOGLE_hlsl_functionality1: + return "SPV_GOOGLE_hlsl_functionality1"; + case Extension::kSPV_INTEL_subgroups: + return "SPV_INTEL_subgroups"; + case Extension::kSPV_KHR_16bit_storage: + return "SPV_KHR_16bit_storage"; + case Extension::kSPV_KHR_8bit_storage: + return "SPV_KHR_8bit_storage"; + case Extension::kSPV_KHR_device_group: + return "SPV_KHR_device_group"; + case Extension::kSPV_KHR_multiview: + return "SPV_KHR_multiview"; + case Extension::kSPV_KHR_post_depth_coverage: + return "SPV_KHR_post_depth_coverage"; + case Extension::kSPV_KHR_shader_atomic_counter_ops: + return "SPV_KHR_shader_atomic_counter_ops"; + case Extension::kSPV_KHR_shader_ballot: + return "SPV_KHR_shader_ballot"; + case Extension::kSPV_KHR_shader_draw_parameters: + return "SPV_KHR_shader_draw_parameters"; + case Extension::kSPV_KHR_storage_buffer_storage_class: + return "SPV_KHR_storage_buffer_storage_class"; + case Extension::kSPV_KHR_subgroup_vote: + return "SPV_KHR_subgroup_vote"; + case Extension::kSPV_KHR_variable_pointers: + return "SPV_KHR_variable_pointers"; + case Extension::kSPV_NVX_multiview_per_view_attributes: + return "SPV_NVX_multiview_per_view_attributes"; + case Extension::kSPV_NV_geometry_shader_passthrough: + return "SPV_NV_geometry_shader_passthrough"; + case Extension::kSPV_NV_sample_mask_override_coverage: + return "SPV_NV_sample_mask_override_coverage"; + case Extension::kSPV_NV_shader_subgroup_partitioned: + return "SPV_NV_shader_subgroup_partitioned"; + case Extension::kSPV_NV_stereo_view_rendering: + return "SPV_NV_stereo_view_rendering"; + case Extension::kSPV_NV_viewport_array2: + return "SPV_NV_viewport_array2"; + case Extension::kSPV_VALIDATOR_ignore_type_decl_unique: + return "SPV_VALIDATOR_ignore_type_decl_unique"; + }; + + return ""; +} + + + bool GetExtensionFromString(const char* str, Extension* extension) { + static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_INTEL_subgroups", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_device_group", "SPV_KHR_multiview", "SPV_KHR_post_depth_coverage", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_vote", "SPV_KHR_variable_pointers", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_geometry_shader_passthrough", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" }; + static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_INTEL_subgroups, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique }; + const auto b = std::begin(known_ext_strs); + const auto e = std::end(known_ext_strs); + const auto found = std::equal_range( + b, e, str, [](const char* str1, const char* str2) { + return std::strcmp(str1, str2) < 0; + }); + if (found.first == e || found.first == found.second) return false; + + *extension = known_ext_ids[found.first - b]; + return true; + } + + +const char* CapabilityToString(SpvCapability capability) { + switch (capability) { + case SpvCapabilityMatrix: + return "Matrix"; + case SpvCapabilityShader: + return "Shader"; + case SpvCapabilityGeometry: + return "Geometry"; + case SpvCapabilityTessellation: + return "Tessellation"; + case SpvCapabilityAddresses: + return "Addresses"; + case SpvCapabilityLinkage: + return "Linkage"; + case SpvCapabilityKernel: + return "Kernel"; + case SpvCapabilityVector16: + return "Vector16"; + case SpvCapabilityFloat16Buffer: + return "Float16Buffer"; + case SpvCapabilityFloat16: + return "Float16"; + case SpvCapabilityFloat64: + return "Float64"; + case SpvCapabilityInt64: + return "Int64"; + case SpvCapabilityInt64Atomics: + return "Int64Atomics"; + case SpvCapabilityImageBasic: + return "ImageBasic"; + case SpvCapabilityImageReadWrite: + return "ImageReadWrite"; + case SpvCapabilityImageMipmap: + return "ImageMipmap"; + case SpvCapabilityPipes: + return "Pipes"; + case SpvCapabilityGroups: + return "Groups"; + case SpvCapabilityDeviceEnqueue: + return "DeviceEnqueue"; + case SpvCapabilityLiteralSampler: + return "LiteralSampler"; + case SpvCapabilityAtomicStorage: + return "AtomicStorage"; + case SpvCapabilityInt16: + return "Int16"; + case SpvCapabilityTessellationPointSize: + return "TessellationPointSize"; + case SpvCapabilityGeometryPointSize: + return "GeometryPointSize"; + case SpvCapabilityImageGatherExtended: + return "ImageGatherExtended"; + case SpvCapabilityStorageImageMultisample: + return "StorageImageMultisample"; + case SpvCapabilityUniformBufferArrayDynamicIndexing: + return "UniformBufferArrayDynamicIndexing"; + case SpvCapabilitySampledImageArrayDynamicIndexing: + return "SampledImageArrayDynamicIndexing"; + case SpvCapabilityStorageBufferArrayDynamicIndexing: + return "StorageBufferArrayDynamicIndexing"; + case SpvCapabilityStorageImageArrayDynamicIndexing: + return "StorageImageArrayDynamicIndexing"; + case SpvCapabilityClipDistance: + return "ClipDistance"; + case SpvCapabilityCullDistance: + return "CullDistance"; + case SpvCapabilityImageCubeArray: + return "ImageCubeArray"; + case SpvCapabilitySampleRateShading: + return "SampleRateShading"; + case SpvCapabilityImageRect: + return "ImageRect"; + case SpvCapabilitySampledRect: + return "SampledRect"; + case SpvCapabilityGenericPointer: + return "GenericPointer"; + case SpvCapabilityInt8: + return "Int8"; + case SpvCapabilityInputAttachment: + return "InputAttachment"; + case SpvCapabilitySparseResidency: + return "SparseResidency"; + case SpvCapabilityMinLod: + return "MinLod"; + case SpvCapabilitySampled1D: + return "Sampled1D"; + case SpvCapabilityImage1D: + return "Image1D"; + case SpvCapabilitySampledCubeArray: + return "SampledCubeArray"; + case SpvCapabilitySampledBuffer: + return "SampledBuffer"; + case SpvCapabilityImageBuffer: + return "ImageBuffer"; + case SpvCapabilityImageMSArray: + return "ImageMSArray"; + case SpvCapabilityStorageImageExtendedFormats: + return "StorageImageExtendedFormats"; + case SpvCapabilityImageQuery: + return "ImageQuery"; + case SpvCapabilityDerivativeControl: + return "DerivativeControl"; + case SpvCapabilityInterpolationFunction: + return "InterpolationFunction"; + case SpvCapabilityTransformFeedback: + return "TransformFeedback"; + case SpvCapabilityGeometryStreams: + return "GeometryStreams"; + case SpvCapabilityStorageImageReadWithoutFormat: + return "StorageImageReadWithoutFormat"; + case SpvCapabilityStorageImageWriteWithoutFormat: + return "StorageImageWriteWithoutFormat"; + case SpvCapabilityMultiViewport: + return "MultiViewport"; + case SpvCapabilitySubgroupDispatch: + return "SubgroupDispatch"; + case SpvCapabilityNamedBarrier: + return "NamedBarrier"; + case SpvCapabilityPipeStorage: + return "PipeStorage"; + case SpvCapabilityGroupNonUniform: + return "GroupNonUniform"; + case SpvCapabilityGroupNonUniformVote: + return "GroupNonUniformVote"; + case SpvCapabilityGroupNonUniformArithmetic: + return "GroupNonUniformArithmetic"; + case SpvCapabilityGroupNonUniformBallot: + return "GroupNonUniformBallot"; + case SpvCapabilityGroupNonUniformShuffle: + return "GroupNonUniformShuffle"; + case SpvCapabilityGroupNonUniformShuffleRelative: + return "GroupNonUniformShuffleRelative"; + case SpvCapabilityGroupNonUniformClustered: + return "GroupNonUniformClustered"; + case SpvCapabilityGroupNonUniformQuad: + return "GroupNonUniformQuad"; + case SpvCapabilitySubgroupBallotKHR: + return "SubgroupBallotKHR"; + case SpvCapabilityDrawParameters: + return "DrawParameters"; + case SpvCapabilitySubgroupVoteKHR: + return "SubgroupVoteKHR"; + case SpvCapabilityStorageBuffer16BitAccess: + return "StorageBuffer16BitAccess"; + case SpvCapabilityUniformAndStorageBuffer16BitAccess: + return "UniformAndStorageBuffer16BitAccess"; + case SpvCapabilityStoragePushConstant16: + return "StoragePushConstant16"; + case SpvCapabilityStorageInputOutput16: + return "StorageInputOutput16"; + case SpvCapabilityDeviceGroup: + return "DeviceGroup"; + case SpvCapabilityMultiView: + return "MultiView"; + case SpvCapabilityVariablePointersStorageBuffer: + return "VariablePointersStorageBuffer"; + case SpvCapabilityVariablePointers: + return "VariablePointers"; + case SpvCapabilityAtomicStorageOps: + return "AtomicStorageOps"; + case SpvCapabilitySampleMaskPostDepthCoverage: + return "SampleMaskPostDepthCoverage"; + case SpvCapabilityStorageBuffer8BitAccess: + return "StorageBuffer8BitAccess"; + case SpvCapabilityUniformAndStorageBuffer8BitAccess: + return "UniformAndStorageBuffer8BitAccess"; + case SpvCapabilityStoragePushConstant8: + return "StoragePushConstant8"; + case SpvCapabilityFloat16ImageAMD: + return "Float16ImageAMD"; + case SpvCapabilityImageGatherBiasLodAMD: + return "ImageGatherBiasLodAMD"; + case SpvCapabilityFragmentMaskAMD: + return "FragmentMaskAMD"; + case SpvCapabilityStencilExportEXT: + return "StencilExportEXT"; + case SpvCapabilityImageReadWriteLodAMD: + return "ImageReadWriteLodAMD"; + case SpvCapabilitySampleMaskOverrideCoverageNV: + return "SampleMaskOverrideCoverageNV"; + case SpvCapabilityGeometryShaderPassthroughNV: + return "GeometryShaderPassthroughNV"; + case SpvCapabilityShaderViewportIndexLayerEXT: + return "ShaderViewportIndexLayerEXT"; + case SpvCapabilityShaderViewportMaskNV: + return "ShaderViewportMaskNV"; + case SpvCapabilityShaderStereoViewNV: + return "ShaderStereoViewNV"; + case SpvCapabilityPerViewAttributesNV: + return "PerViewAttributesNV"; + case SpvCapabilityFragmentFullyCoveredEXT: + return "FragmentFullyCoveredEXT"; + case SpvCapabilityShaderNonUniformEXT: + return "ShaderNonUniformEXT"; + case SpvCapabilityRuntimeDescriptorArrayEXT: + return "RuntimeDescriptorArrayEXT"; + case SpvCapabilityInputAttachmentArrayDynamicIndexingEXT: + return "InputAttachmentArrayDynamicIndexingEXT"; + case SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT: + return "UniformTexelBufferArrayDynamicIndexingEXT"; + case SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT: + return "StorageTexelBufferArrayDynamicIndexingEXT"; + case SpvCapabilityUniformBufferArrayNonUniformIndexingEXT: + return "UniformBufferArrayNonUniformIndexingEXT"; + case SpvCapabilitySampledImageArrayNonUniformIndexingEXT: + return "SampledImageArrayNonUniformIndexingEXT"; + case SpvCapabilityStorageBufferArrayNonUniformIndexingEXT: + return "StorageBufferArrayNonUniformIndexingEXT"; + case SpvCapabilityStorageImageArrayNonUniformIndexingEXT: + return "StorageImageArrayNonUniformIndexingEXT"; + case SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT: + return "InputAttachmentArrayNonUniformIndexingEXT"; + case SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT: + return "UniformTexelBufferArrayNonUniformIndexingEXT"; + case SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT: + return "StorageTexelBufferArrayNonUniformIndexingEXT"; + case SpvCapabilitySubgroupShuffleINTEL: + return "SubgroupShuffleINTEL"; + case SpvCapabilitySubgroupBufferBlockIOINTEL: + return "SubgroupBufferBlockIOINTEL"; + case SpvCapabilitySubgroupImageBlockIOINTEL: + return "SubgroupImageBlockIOINTEL"; + case SpvCapabilityGroupNonUniformPartitionedNV: + return "GroupNonUniformPartitionedNV"; + case SpvCapabilityMax: + assert(0 && "Attempting to convert SpvCapabilityMax to string"); + return ""; + }; + + return ""; +} diff --git a/3rdparty/spirv-tools/build/examples/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/examples/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/examples/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/examples/CMakeFiles/progress.marks new file mode 100644 index 000000000..abdfb053e --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/CMakeFiles/progress.marks @@ -0,0 +1 @@ +60 diff --git a/3rdparty/spirv-tools/build/examples/CTestTestfile.cmake b/3rdparty/spirv-tools/build/examples/CTestTestfile.cmake new file mode 100644 index 000000000..45ac88f32 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs(cpp-interface) diff --git a/3rdparty/spirv-tools/build/examples/Makefile b/3rdparty/spirv-tools/build/examples/Makefile new file mode 100644 index 000000000..62fd5f0ab --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/examples/cmake_install.cmake b/3rdparty/spirv-tools/build/examples/cmake_install.cmake new file mode 100644 index 000000000..b3e63864c --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cmake_install.cmake @@ -0,0 +1,40 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/cmake_install.cmake") + +endif() + diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/progress.marks new file mode 100644 index 000000000..abdfb053e --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/progress.marks @@ -0,0 +1 @@ +60 diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/DependInfo.cmake new file mode 100644 index 000000000..75a1b4d2c --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface/main.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "../include" + "../external/SPIRV-Headers/include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make new file mode 100644 index 000000000..378cd7ba3 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make @@ -0,0 +1,115 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend.make + +# Include the progress variables for this target. +include examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/progress.make + +# Include the compile flags for this target's objects. +include examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/flags.make + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/flags.make +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o: ../examples/cpp-interface/main.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface/main.cpp + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface/main.cpp > CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.i + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface/main.cpp -o CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.s + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.requires: + +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.requires + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.provides: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.requires + $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.provides.build +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.provides + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.provides.build: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o + + +# Object files for target spirv-tools-cpp-example +spirv__tools__cpp__example_OBJECTS = \ +"CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o" + +# External object files for target spirv-tools-cpp-example +spirv__tools__cpp__example_EXTERNAL_OBJECTS = + +examples/cpp-interface/spirv-tools-cpp-example: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o +examples/cpp-interface/spirv-tools-cpp-example: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make +examples/cpp-interface/spirv-tools-cpp-example: source/opt/libSPIRV-Tools-opt.a +examples/cpp-interface/spirv-tools-cpp-example: source/libSPIRV-Tools.a +examples/cpp-interface/spirv-tools-cpp-example: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable spirv-tools-cpp-example" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-tools-cpp-example.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build: examples/cpp-interface/spirv-tools-cpp-example + +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/requires: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o.requires + +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/requires + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-cpp-example.dir/cmake_clean.cmake +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/clean + +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend + diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/cmake_clean.cmake new file mode 100644 index 000000000..6800a1705 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o" + "spirv-tools-cpp-example.pdb" + "spirv-tools-cpp-example" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-tools-cpp-example.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend.make b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend.make new file mode 100644 index 000000000..9275d7ca6 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-tools-cpp-example. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/flags.make b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/flags.make new file mode 100644 index 000000000..8ed1499e3 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include + diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/link.txt b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/link.txt new file mode 100644 index 000000000..bdc594555 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o -o spirv-tools-cpp-example -rdynamic ../../source/opt/libSPIRV-Tools-opt.a ../../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/progress.make b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/progress.make new file mode 100644 index 000000000..f07b37ae0 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 96 + diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/CTestTestfile.cmake b/3rdparty/spirv-tools/build/examples/cpp-interface/CTestTestfile.cmake new file mode 100644 index 000000000..dcfd6e9cf --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/Makefile b/3rdparty/spirv-tools/build/examples/cpp-interface/Makefile new file mode 100644 index 000000000..98e53b0e0 --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/Makefile @@ -0,0 +1,240 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/examples/cpp-interface/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/cpp-interface/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/cpp-interface/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/cpp-interface/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/cpp-interface/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule +.PHONY : examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule + +# Convenience name for target. +spirv-tools-cpp-example: examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/rule + +.PHONY : spirv-tools-cpp-example + +# fast build rule for target. +spirv-tools-cpp-example/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build +.PHONY : spirv-tools-cpp-example/fast + +main.o: main.cpp.o + +.PHONY : main.o + +# target to build an object file +main.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.o +.PHONY : main.cpp.o + +main.i: main.cpp.i + +.PHONY : main.i + +# target to preprocess a source file +main.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.i +.PHONY : main.cpp.i + +main.s: main.cpp.s + +.PHONY : main.s + +# target to generate assembly for a file +main.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/build.make examples/cpp-interface/CMakeFiles/spirv-tools-cpp-example.dir/main.cpp.s +.PHONY : main.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... rebuild_cache" + @echo "... install/strip" + @echo "... spirv-tools-cpp-example" + @echo "... edit_cache" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... main.o" + @echo "... main.i" + @echo "... main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/examples/cpp-interface/cmake_install.cmake b/3rdparty/spirv-tools/build/examples/cpp-interface/cmake_install.cmake new file mode 100644 index 000000000..7fd5fb46e --- /dev/null +++ b/3rdparty/spirv-tools/build/examples/cpp-interface/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/examples/cpp-interface + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/extension_enum.inc b/3rdparty/spirv-tools/build/extension_enum.inc new file mode 100644 index 000000000..c1cf94a7b --- /dev/null +++ b/3rdparty/spirv-tools/build/extension_enum.inc @@ -0,0 +1,35 @@ +kSPV_AMD_gcn_shader, +kSPV_AMD_gpu_shader_half_float, +kSPV_AMD_gpu_shader_half_float_fetch, +kSPV_AMD_gpu_shader_int16, +kSPV_AMD_shader_ballot, +kSPV_AMD_shader_explicit_vertex_parameter, +kSPV_AMD_shader_fragment_mask, +kSPV_AMD_shader_image_load_store_lod, +kSPV_AMD_shader_trinary_minmax, +kSPV_AMD_texture_gather_bias_lod, +kSPV_EXT_descriptor_indexing, +kSPV_EXT_fragment_fully_covered, +kSPV_EXT_shader_stencil_export, +kSPV_EXT_shader_viewport_index_layer, +kSPV_GOOGLE_decorate_string, +kSPV_GOOGLE_hlsl_functionality1, +kSPV_INTEL_subgroups, +kSPV_KHR_16bit_storage, +kSPV_KHR_8bit_storage, +kSPV_KHR_device_group, +kSPV_KHR_multiview, +kSPV_KHR_post_depth_coverage, +kSPV_KHR_shader_atomic_counter_ops, +kSPV_KHR_shader_ballot, +kSPV_KHR_shader_draw_parameters, +kSPV_KHR_storage_buffer_storage_class, +kSPV_KHR_subgroup_vote, +kSPV_KHR_variable_pointers, +kSPV_NVX_multiview_per_view_attributes, +kSPV_NV_geometry_shader_passthrough, +kSPV_NV_sample_mask_override_coverage, +kSPV_NV_shader_subgroup_partitioned, +kSPV_NV_stereo_view_rendering, +kSPV_NV_viewport_array2, +kSPV_VALIDATOR_ignore_type_decl_unique diff --git a/3rdparty/spirv-tools/build/external/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/external/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/external/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/external/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/external/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/external/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/external/CTestTestfile.cmake b/3rdparty/spirv-tools/build/external/CTestTestfile.cmake new file mode 100644 index 000000000..01e14d30e --- /dev/null +++ b/3rdparty/spirv-tools/build/external/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/external +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/external/Makefile b/3rdparty/spirv-tools/build/external/Makefile new file mode 100644 index 000000000..c763573f0 --- /dev/null +++ b/3rdparty/spirv-tools/build/external/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/external/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 external/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 external/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 external/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 external/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/external/cmake_install.cmake b/3rdparty/spirv-tools/build/external/cmake_install.cmake new file mode 100644 index 000000000..125328eaf --- /dev/null +++ b/3rdparty/spirv-tools/build/external/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/external + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/generators.inc b/3rdparty/spirv-tools/build/generators.inc new file mode 100644 index 000000000..39709d3aa --- /dev/null +++ b/3rdparty/spirv-tools/build/generators.inc @@ -0,0 +1,20 @@ +{0, "Khronos", "", "Khronos"}, +{1, "LunarG", "", "LunarG"}, +{2, "Valve", "", "Valve"}, +{3, "Codeplay", "", "Codeplay"}, +{4, "NVIDIA", "", "NVIDIA"}, +{5, "ARM", "", "ARM"}, +{6, "Khronos", "LLVM/SPIR-V Translator", "Khronos LLVM/SPIR-V Translator"}, +{7, "Khronos", "SPIR-V Tools Assembler", "Khronos SPIR-V Tools Assembler"}, +{8, "Khronos", "Glslang Reference Front End", "Khronos Glslang Reference Front End"}, +{9, "Qualcomm", "", "Qualcomm"}, +{10, "AMD", "", "AMD"}, +{11, "Intel", "", "Intel"}, +{12, "Imagination", "", "Imagination"}, +{13, "Google", "Shaderc over Glslang", "Google Shaderc over Glslang"}, +{14, "Google", "spiregg", "Google spiregg"}, +{15, "Google", "rspirv", "Google rspirv"}, +{16, "X-LEGEND", "Mesa-IR/SPIR-V Translator", "X-LEGEND Mesa-IR/SPIR-V Translator"}, +{17, "Khronos", "SPIR-V Tools Linker", "Khronos SPIR-V Tools Linker"}, +{18, "Wine", "VKD3D Shader Compiler", "Wine VKD3D Shader Compiler"}, +{19, "Clay", "Clay Shader Compiler", "Clay Clay Shader Compiler"}, diff --git a/3rdparty/spirv-tools/build/glsl.std.450.insts.inc b/3rdparty/spirv-tools/build/glsl.std.450.insts.inc new file mode 100644 index 000000000..6bb2e7662 --- /dev/null +++ b/3rdparty/spirv-tools/build/glsl.std.450.insts.inc @@ -0,0 +1,86 @@ +static const SpvCapability pygen_variable_caps_Float64[] = {SpvCapabilityFloat64}; +static const SpvCapability pygen_variable_caps_InterpolationFunction[] = {SpvCapabilityInterpolationFunction}; + +static const spv_ext_inst_desc_t glsl_entries[] = { + {"Round", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"RoundEven", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Trunc", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FAbs", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SAbs", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FSign", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SSign", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Floor", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Ceil", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Fract", 10, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Radians", 11, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Degrees", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Sin", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Cos", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Tan", 15, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Asin", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Acos", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Atan", 18, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Sinh", 19, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Cosh", 20, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Tanh", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Asinh", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Acosh", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Atanh", 24, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Atan2", 25, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Pow", 26, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Exp", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Log", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Exp2", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Log2", 30, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Sqrt", 31, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"InverseSqrt", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Determinant", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"MatrixInverse", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Modf", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"ModfStruct", 36, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FMin", 37, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UMin", 38, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SMin", 39, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FMax", 40, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UMax", 41, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SMax", 42, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FClamp", 43, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UClamp", 44, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SClamp", 45, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FMix", 46, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"IMix", 47, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Step", 48, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SmoothStep", 49, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Fma", 50, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Frexp", 51, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FrexpStruct", 52, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Ldexp", 53, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"PackSnorm4x8", 54, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"PackUnorm4x8", 55, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"PackSnorm2x16", 56, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"PackUnorm2x16", 57, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"PackHalf2x16", 58, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"PackDouble2x32", 59, 1, pygen_variable_caps_Float64, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UnpackSnorm2x16", 60, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UnpackUnorm2x16", 61, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UnpackHalf2x16", 62, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UnpackSnorm4x8", 63, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UnpackUnorm4x8", 64, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UnpackDouble2x32", 65, 1, pygen_variable_caps_Float64, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Length", 66, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Distance", 67, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Cross", 68, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Normalize", 69, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FaceForward", 70, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Reflect", 71, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"Refract", 72, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FindILsb", 73, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FindSMsb", 74, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FindUMsb", 75, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"InterpolateAtCentroid", 76, 1, pygen_variable_caps_InterpolationFunction, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"InterpolateAtSample", 77, 1, pygen_variable_caps_InterpolationFunction, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"InterpolateAtOffset", 78, 1, pygen_variable_caps_InterpolationFunction, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"NMin", 79, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"NMax", 80, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"NClamp", 81, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/opencl.std.insts.inc b/3rdparty/spirv-tools/build/opencl.std.insts.inc new file mode 100644 index 000000000..abc76efc3 --- /dev/null +++ b/3rdparty/spirv-tools/build/opencl.std.insts.inc @@ -0,0 +1,166 @@ + + +static const spv_ext_inst_desc_t opencl_entries[] = { + {"acos", 0, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"acosh", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"acospi", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"asin", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"asinh", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"asinpi", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"atan", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"atan2", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"atanh", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"atanpi", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"atan2pi", 10, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"cbrt", 11, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"ceil", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"copysign", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"cos", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"cosh", 15, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"cospi", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"erfc", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"erf", 18, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"exp", 19, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"exp2", 20, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"exp10", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"expm1", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fabs", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fdim", 24, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"floor", 25, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fma", 26, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fmax", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fmin", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fmod", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fract", 30, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"frexp", 31, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"hypot", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"ilogb", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"ldexp", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"lgamma", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"lgamma_r", 36, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"log", 37, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"log2", 38, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"log10", 39, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"log1p", 40, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"logb", 41, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"mad", 42, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"maxmag", 43, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"minmag", 44, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"modf", 45, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"nan", 46, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"nextafter", 47, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"pow", 48, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"pown", 49, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"powr", 50, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"remainder", 51, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"remquo", 52, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"rint", 53, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"rootn", 54, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"round", 55, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"rsqrt", 56, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"sin", 57, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"sincos", 58, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"sinh", 59, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"sinpi", 60, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"sqrt", 61, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"tan", 62, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"tanh", 63, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"tanpi", 64, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"tgamma", 65, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"trunc", 66, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_cos", 67, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_divide", 68, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_exp", 69, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_exp2", 70, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_exp10", 71, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_log", 72, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_log2", 73, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_log10", 74, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_powr", 75, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_recip", 76, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_rsqrt", 77, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_sin", 78, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_sqrt", 79, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"half_tan", 80, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_cos", 81, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_divide", 82, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_exp", 83, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_exp2", 84, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_exp10", 85, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_log", 86, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_log2", 87, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_log10", 88, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_powr", 89, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_recip", 90, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_rsqrt", 91, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_sin", 92, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_sqrt", 93, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"native_tan", 94, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fclamp", 95, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"degrees", 96, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fmax_common", 97, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fmin_common", 98, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"mix", 99, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"radians", 100, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"step", 101, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"smoothstep", 102, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"sign", 103, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"cross", 104, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"distance", 105, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"length", 106, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"normalize", 107, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fast_distance", 108, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fast_length", 109, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"fast_normalize", 110, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_abs", 141, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_abs_diff", 142, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_add_sat", 143, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_add_sat", 144, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_hadd", 145, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_hadd", 146, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_rhadd", 147, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_rhadd", 148, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_clamp", 149, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_clamp", 150, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"clz", 151, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"ctz", 152, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_mad_hi", 153, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_mad_sat", 154, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_mad_sat", 155, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_max", 156, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_max", 157, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_min", 158, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_min", 159, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_mul_hi", 160, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"rotate", 161, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_sub_sat", 162, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_sub_sat", 163, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_upsample", 164, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_upsample", 165, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"popcount", 166, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_mad24", 167, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_mad24", 168, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"s_mul24", 169, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_mul24", 170, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"vloadn", 171, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"vstoren", 172, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"vload_half", 173, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"vload_halfn", 174, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"vstore_half", 175, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"vstore_half_r", 176, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_FP_ROUNDING_MODE, SPV_OPERAND_TYPE_NONE}}, + {"vstore_halfn", 177, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"vstore_halfn_r", 178, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_FP_ROUNDING_MODE, SPV_OPERAND_TYPE_NONE}}, + {"vloada_halfn", 179, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}, + {"vstorea_halfn", 180, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"vstorea_halfn_r", 181, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_FP_ROUNDING_MODE, SPV_OPERAND_TYPE_NONE}}, + {"shuffle", 182, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"shuffle2", 183, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"printf", 184, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"prefetch", 185, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"bitselect", 186, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"select", 187, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_abs", 201, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_abs_diff", 202, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_mul_hi", 203, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"u_mad_hi", 204, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/operand.kinds-unified1.inc b/3rdparty/spirv-tools/build/operand.kinds-unified1.inc new file mode 100644 index 000000000..e40c74b21 --- /dev/null +++ b/3rdparty/spirv-tools/build/operand.kinds-unified1.inc @@ -0,0 +1,749 @@ +static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddresses}; +static const SpvCapability pygen_variable_caps_AtomicStorage[] = {SpvCapabilityAtomicStorage}; +static const SpvCapability pygen_variable_caps_ClipDistance[] = {SpvCapabilityClipDistance}; +static const SpvCapability pygen_variable_caps_CullDistance[] = {SpvCapabilityCullDistance}; +static const SpvCapability pygen_variable_caps_DeviceEnqueue[] = {SpvCapabilityDeviceEnqueue}; +static const SpvCapability pygen_variable_caps_DeviceGroup[] = {SpvCapabilityDeviceGroup}; +static const SpvCapability pygen_variable_caps_DrawParameters[] = {SpvCapabilityDrawParameters}; +static const SpvCapability pygen_variable_caps_FragmentFullyCoveredEXT[] = {SpvCapabilityFragmentFullyCoveredEXT}; +static const SpvCapability pygen_variable_caps_GenericPointer[] = {SpvCapabilityGenericPointer}; +static const SpvCapability pygen_variable_caps_Geometry[] = {SpvCapabilityGeometry}; +static const SpvCapability pygen_variable_caps_GeometryTessellation[] = {SpvCapabilityGeometry, SpvCapabilityTessellation}; +static const SpvCapability pygen_variable_caps_GeometryShaderPassthroughNV[] = {SpvCapabilityGeometryShaderPassthroughNV}; +static const SpvCapability pygen_variable_caps_GeometryStreams[] = {SpvCapabilityGeometryStreams}; +static const SpvCapability pygen_variable_caps_GroupNonUniform[] = {SpvCapabilityGroupNonUniform}; +static const SpvCapability pygen_variable_caps_GroupNonUniformClustered[] = {SpvCapabilityGroupNonUniformClustered}; +static const SpvCapability pygen_variable_caps_GroupNonUniformPartitionedNV[] = {SpvCapabilityGroupNonUniformPartitionedNV}; +static const SpvCapability pygen_variable_caps_ImageBasic[] = {SpvCapabilityImageBasic}; +static const SpvCapability pygen_variable_caps_ImageBuffer[] = {SpvCapabilityImageBuffer}; +static const SpvCapability pygen_variable_caps_ImageBufferShaderNonUniformEXT[] = {SpvCapabilityImageBuffer, SpvCapabilityShaderNonUniformEXT}; +static const SpvCapability pygen_variable_caps_ImageGatherExtended[] = {SpvCapabilityImageGatherExtended}; +static const SpvCapability pygen_variable_caps_InputAttachment[] = {SpvCapabilityInputAttachment}; +static const SpvCapability pygen_variable_caps_InputAttachmentShaderNonUniformEXT[] = {SpvCapabilityInputAttachment, SpvCapabilityShaderNonUniformEXT}; +static const SpvCapability pygen_variable_caps_Int64[] = {SpvCapabilityInt64}; +static const SpvCapability pygen_variable_caps_Kernel[] = {SpvCapabilityKernel}; +static const SpvCapability pygen_variable_caps_KernelGroupNonUniform[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniform}; +static const SpvCapability pygen_variable_caps_KernelGroupNonUniformSubgroupBallotKHR[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniform, SpvCapabilitySubgroupBallotKHR}; +static const SpvCapability pygen_variable_caps_KernelGroupNonUniformArithmeticGroupNonUniformBallot[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniformArithmetic, SpvCapabilityGroupNonUniformBallot}; +static const SpvCapability pygen_variable_caps_Linkage[] = {SpvCapabilityLinkage}; +static const SpvCapability pygen_variable_caps_Matrix[] = {SpvCapabilityMatrix}; +static const SpvCapability pygen_variable_caps_MinLod[] = {SpvCapabilityMinLod}; +static const SpvCapability pygen_variable_caps_MultiView[] = {SpvCapabilityMultiView}; +static const SpvCapability pygen_variable_caps_MultiViewport[] = {SpvCapabilityMultiViewport}; +static const SpvCapability pygen_variable_caps_PerViewAttributesNV[] = {SpvCapabilityPerViewAttributesNV}; +static const SpvCapability pygen_variable_caps_Pipes[] = {SpvCapabilityPipes}; +static const SpvCapability pygen_variable_caps_SampleMaskOverrideCoverageNV[] = {SpvCapabilitySampleMaskOverrideCoverageNV}; +static const SpvCapability pygen_variable_caps_SampleMaskPostDepthCoverage[] = {SpvCapabilitySampleMaskPostDepthCoverage}; +static const SpvCapability pygen_variable_caps_SampleRateShading[] = {SpvCapabilitySampleRateShading}; +static const SpvCapability pygen_variable_caps_Sampled1D[] = {SpvCapabilitySampled1D}; +static const SpvCapability pygen_variable_caps_SampledBuffer[] = {SpvCapabilitySampledBuffer}; +static const SpvCapability pygen_variable_caps_SampledBufferShaderNonUniformEXT[] = {SpvCapabilitySampledBuffer, SpvCapabilityShaderNonUniformEXT}; +static const SpvCapability pygen_variable_caps_SampledCubeArray[] = {SpvCapabilitySampledCubeArray}; +static const SpvCapability pygen_variable_caps_SampledRect[] = {SpvCapabilitySampledRect}; +static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader}; +static const SpvCapability pygen_variable_caps_ShaderKernel[] = {SpvCapabilityShader, SpvCapabilityKernel}; +static const SpvCapability pygen_variable_caps_ShaderNonUniformEXT[] = {SpvCapabilityShaderNonUniformEXT}; +static const SpvCapability pygen_variable_caps_ShaderStereoViewNV[] = {SpvCapabilityShaderStereoViewNV}; +static const SpvCapability pygen_variable_caps_ShaderViewportIndexLayerNV[] = {SpvCapabilityShaderViewportIndexLayerNV}; +static const SpvCapability pygen_variable_caps_ShaderViewportMaskNV[] = {SpvCapabilityShaderViewportMaskNV}; +static const SpvCapability pygen_variable_caps_StencilExportEXT[] = {SpvCapabilityStencilExportEXT}; +static const SpvCapability pygen_variable_caps_StorageBuffer16BitAccessStorageUniformBufferBlock16[] = {SpvCapabilityStorageBuffer16BitAccess, SpvCapabilityStorageUniformBufferBlock16}; +static const SpvCapability pygen_variable_caps_StorageBuffer8BitAccess[] = {SpvCapabilityStorageBuffer8BitAccess}; +static const SpvCapability pygen_variable_caps_StorageImageExtendedFormats[] = {SpvCapabilityStorageImageExtendedFormats}; +static const SpvCapability pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot[] = {SpvCapabilitySubgroupBallotKHR, SpvCapabilityGroupNonUniformBallot}; +static const SpvCapability pygen_variable_caps_SubgroupDispatch[] = {SpvCapabilitySubgroupDispatch}; +static const SpvCapability pygen_variable_caps_Tessellation[] = {SpvCapabilityTessellation}; +static const SpvCapability pygen_variable_caps_TransformFeedback[] = {SpvCapabilityTransformFeedback}; +static const SpvCapability pygen_variable_caps_VariablePointersStorageBuffer[] = {SpvCapabilityVariablePointersStorageBuffer}; + +static const spvtools::Extension pygen_variable_exts_SPV_AMD_gpu_shader_half_float_fetch[] = {spvtools::Extension::kSPV_AMD_gpu_shader_half_float_fetch}; +static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter[] = {spvtools::Extension::kSPV_AMD_shader_explicit_vertex_parameter}; +static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_fragment_mask[] = {spvtools::Extension::kSPV_AMD_shader_fragment_mask}; +static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_image_load_store_lod[] = {spvtools::Extension::kSPV_AMD_shader_image_load_store_lod}; +static const spvtools::Extension pygen_variable_exts_SPV_AMD_texture_gather_bias_lod[] = {spvtools::Extension::kSPV_AMD_texture_gather_bias_lod}; +static const spvtools::Extension pygen_variable_exts_SPV_EXT_descriptor_indexing[] = {spvtools::Extension::kSPV_EXT_descriptor_indexing}; +static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_fully_covered[] = {spvtools::Extension::kSPV_EXT_fragment_fully_covered}; +static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_stencil_export[] = {spvtools::Extension::kSPV_EXT_shader_stencil_export}; +static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_viewport_index_layer[] = {spvtools::Extension::kSPV_EXT_shader_viewport_index_layer}; +static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1}; +static const spvtools::Extension pygen_variable_exts_SPV_INTEL_subgroups[] = {spvtools::Extension::kSPV_INTEL_subgroups}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_16bit_storage[] = {spvtools::Extension::kSPV_KHR_16bit_storage}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_8bit_storage[] = {spvtools::Extension::kSPV_KHR_8bit_storage}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_device_group[] = {spvtools::Extension::kSPV_KHR_device_group}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_multiview[] = {spvtools::Extension::kSPV_KHR_multiview}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_post_depth_coverage[] = {spvtools::Extension::kSPV_KHR_post_depth_coverage}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_atomic_counter_ops[] = {spvtools::Extension::kSPV_KHR_shader_atomic_counter_ops}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_ballot[] = {spvtools::Extension::kSPV_KHR_shader_ballot}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parameters[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_storage_buffer_storage_class, spvtools::Extension::kSPV_KHR_variable_pointers}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_vote[] = {spvtools::Extension::kSPV_KHR_subgroup_vote}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_variable_pointers}; +static const spvtools::Extension pygen_variable_exts_SPV_NVX_multiview_per_view_attributes[] = {spvtools::Extension::kSPV_NVX_multiview_per_view_attributes}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_geometry_shader_passthrough[] = {spvtools::Extension::kSPV_NV_geometry_shader_passthrough}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_sample_mask_override_coverage[] = {spvtools::Extension::kSPV_NV_sample_mask_override_coverage}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_subgroup_partitioned[] = {spvtools::Extension::kSPV_NV_shader_subgroup_partitioned}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_stereo_view_rendering[] = {spvtools::Extension::kSPV_NV_stereo_view_rendering}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_viewport_array2[] = {spvtools::Extension::kSPV_NV_viewport_array2}; + +static const spv_operand_desc_t pygen_variable_ImageOperandsEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Bias", 0x0001, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Lod", 0x0002, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Grad", 0x0004, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstOffset", 0x0008, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Offset", 0x0010, 1, pygen_variable_caps_ImageGatherExtended, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ConstOffsets", 0x0020, 1, pygen_variable_caps_ImageGatherExtended, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Sample", 0x0040, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MinLod", 0x0080, 1, pygen_variable_caps_MinLod, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_FPFastMathModeEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NotNaN", 0x0001, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NotInf", 0x0002, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NSZ", 0x0004, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AllowRecip", 0x0008, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Fast", 0x0010, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_SelectionControlEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Flatten", 0x0001, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DontFlatten", 0x0002, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_LoopControlEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Unroll", 0x0001, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DontUnroll", 0x0002, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DependencyInfinite", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"DependencyLength", 0x0008, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1)} +}; + +static const spv_operand_desc_t pygen_variable_FunctionControlEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Inline", 0x0001, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DontInline", 0x0002, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Pure", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Const", 0x0008, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_MemorySemanticsEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Relaxed", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Acquire", 0x0002, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Release", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AcquireRelease", 0x0008, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SequentiallyConsistent", 0x0010, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UniformMemory", 0x0040, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupMemory", 0x0080, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorkgroupMemory", 0x0100, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CrossWorkgroupMemory", 0x0200, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicCounterMemory", 0x0400, 1, pygen_variable_caps_AtomicStorage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageMemory", 0x0800, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_MemoryAccessEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Volatile", 0x0001, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Aligned", 0x0002, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Nontemporal", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_KernelProfilingInfoEntries[] = { + {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CmdExecTime", 0x0001, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_SourceLanguageEntries[] = { + {"Unknown", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ESSL", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GLSL", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OpenCL_C", 3, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OpenCL_CPP", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HLSL", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_ExecutionModelEntries[] = { + {"Vertex", 0, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TessellationControl", 1, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TessellationEvaluation", 2, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Geometry", 3, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Fragment", 4, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GLCompute", 5, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Kernel", 6, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_AddressingModelEntries[] = { + {"Logical", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Physical32", 1, 1, pygen_variable_caps_Addresses, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Physical64", 2, 1, pygen_variable_caps_Addresses, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_MemoryModelEntries[] = { + {"Simple", 0, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GLSL450", 1, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OpenCL", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_ExecutionModeEntries[] = { + {"Invocations", 0, 1, pygen_variable_caps_Geometry, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpacingEqual", 1, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpacingFractionalEven", 2, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpacingFractionalOdd", 3, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VertexOrderCw", 4, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VertexOrderCcw", 5, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PixelCenterInteger", 6, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OriginUpperLeft", 7, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OriginLowerLeft", 8, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EarlyFragmentTests", 9, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PointMode", 10, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Xfb", 11, 1, pygen_variable_caps_TransformFeedback, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DepthReplacing", 12, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DepthGreater", 14, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DepthLess", 15, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DepthUnchanged", 16, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LocalSize", 17, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LocalSizeHint", 18, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InputPoints", 19, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InputLines", 20, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InputLinesAdjacency", 21, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Triangles", 22, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InputTrianglesAdjacency", 23, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Quads", 24, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Isolines", 25, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputVertices", 26, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputPoints", 27, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputLineStrip", 28, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputTriangleStrip", 29, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VecTypeHint", 30, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ContractionOff", 31, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Initializer", 33, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"Finalizer", 34, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"SubgroupSize", 35, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"SubgroupsPerWorkgroup", 36, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"SubgroupsPerWorkgroupId", 37, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, + {"LocalSizeId", 38, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, + {"LocalSizeHintId", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, + {"PostDepthCoverage", 4446, 1, pygen_variable_caps_SampleMaskPostDepthCoverage, 1, pygen_variable_exts_SPV_KHR_post_depth_coverage, {}, 0xffffffffu}, + {"StencilRefReplacingEXT", 5027, 1, pygen_variable_caps_StencilExportEXT, 1, pygen_variable_exts_SPV_EXT_shader_stencil_export, {}, 0xffffffffu} +}; + +static const spv_operand_desc_t pygen_variable_StorageClassEntries[] = { + {"UniformConstant", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Input", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Uniform", 2, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Output", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Workgroup", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CrossWorkgroup", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Private", 6, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Function", 7, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Generic", 8, 1, pygen_variable_caps_GenericPointer, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PushConstant", 9, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicCounter", 10, 1, pygen_variable_caps_AtomicStorage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Image", 11, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageBuffer", 12, 1, pygen_variable_caps_Shader, 2, pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers, {}, SPV_SPIRV_VERSION_WORD(1,3)} +}; + +static const spv_operand_desc_t pygen_variable_DimEntries[] = { + {"1D", 0, 1, pygen_variable_caps_Sampled1D, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"2D", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"3D", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Cube", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rect", 4, 1, pygen_variable_caps_SampledRect, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Buffer", 5, 1, pygen_variable_caps_SampledBuffer, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubpassData", 6, 1, pygen_variable_caps_InputAttachment, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_SamplerAddressingModeEntries[] = { + {"None", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ClampToEdge", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Clamp", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Repeat", 3, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RepeatMirrored", 4, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_SamplerFilterModeEntries[] = { + {"Nearest", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Linear", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_ImageFormatEntries[] = { + {"Unknown", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba32f", 1, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba16f", 2, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R32f", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba8", 4, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba8Snorm", 5, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg32f", 6, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg16f", 7, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R11fG11fB10f", 8, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R16f", 9, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba16", 10, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgb10A2", 11, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg16", 12, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg8", 13, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R16", 14, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R8", 15, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba16Snorm", 16, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg16Snorm", 17, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg8Snorm", 18, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R16Snorm", 19, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R8Snorm", 20, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba32i", 21, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba16i", 22, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba8i", 23, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R32i", 24, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg32i", 25, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg16i", 26, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg8i", 27, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R16i", 28, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R8i", 29, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba32ui", 30, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba16ui", 31, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgba8ui", 32, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R32ui", 33, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rgb10a2ui", 34, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg32ui", 35, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg16ui", 36, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rg8ui", 37, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R16ui", 38, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"R8ui", 39, 1, pygen_variable_caps_StorageImageExtendedFormats, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_ImageChannelOrderEntries[] = { + {"R", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"A", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RG", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RA", 3, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RGB", 4, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RGBA", 5, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BGRA", 6, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ARGB", 7, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Intensity", 8, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Luminance", 9, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rx", 10, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RGx", 11, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RGBx", 12, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Depth", 13, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DepthStencil", 14, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"sRGB", 15, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"sRGBx", 16, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"sRGBA", 17, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"sBGRA", 18, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ABGR", 19, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_ImageChannelDataTypeEntries[] = { + {"SnormInt8", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SnormInt16", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormInt8", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormInt16", 3, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormShort565", 4, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormShort555", 5, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormInt101010", 6, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SignedInt8", 7, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SignedInt16", 8, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SignedInt32", 9, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnsignedInt8", 10, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnsignedInt16", 11, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnsignedInt32", 12, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HalfFloat", 13, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Float", 14, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormInt24", 15, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnormInt101010_2", 16, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_FPRoundingModeEntries[] = { + {"RTE", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RTZ", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RTP", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RTN", 3, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_LinkageTypeEntries[] = { + {"Export", 0, 1, pygen_variable_caps_Linkage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Import", 1, 1, pygen_variable_caps_Linkage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_AccessQualifierEntries[] = { + {"ReadOnly", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WriteOnly", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ReadWrite", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_FunctionParameterAttributeEntries[] = { + {"Zext", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Sext", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ByVal", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Sret", 3, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoAlias", 4, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoCapture", 5, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoWrite", 6, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoReadWrite", 7, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_DecorationEntries[] = { + {"RelaxedPrecision", 0, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SpecId", 1, 2, pygen_variable_caps_ShaderKernel, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Block", 2, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BufferBlock", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RowMajor", 4, 1, pygen_variable_caps_Matrix, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ColMajor", 5, 1, pygen_variable_caps_Matrix, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ArrayStride", 6, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MatrixStride", 7, 1, pygen_variable_caps_Matrix, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GLSLShared", 8, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GLSLPacked", 9, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CPacked", 10, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BuiltIn", 11, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_BUILT_IN}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoPerspective", 13, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Flat", 14, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Patch", 15, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Centroid", 16, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Sample", 17, 1, pygen_variable_caps_SampleRateShading, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Invariant", 18, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Restrict", 19, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Aliased", 20, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Volatile", 21, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Constant", 22, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Coherent", 23, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NonWritable", 24, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NonReadable", 25, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Uniform", 26, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SaturatedConversion", 28, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Stream", 29, 1, pygen_variable_caps_GeometryStreams, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Location", 30, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Component", 31, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Index", 32, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Binding", 33, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DescriptorSet", 34, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Offset", 35, 1, pygen_variable_caps_Shader, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"XfbBuffer", 36, 1, pygen_variable_caps_TransformFeedback, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"XfbStride", 37, 1, pygen_variable_caps_TransformFeedback, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FuncParamAttr", 38, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FPRoundingMode", 39, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_FP_ROUNDING_MODE}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FPFastMathMode", 40, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_FP_FAST_MATH_MODE}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LinkageAttributes", 41, 1, pygen_variable_caps_Linkage, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_STRING, SPV_OPERAND_TYPE_LINKAGE_TYPE}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NoContraction", 42, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InputAttachmentIndex", 43, 1, pygen_variable_caps_InputAttachment, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Alignment", 44, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MaxByteOffset", 45, 1, pygen_variable_caps_Addresses, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"AlignmentId", 46, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, + {"MaxByteOffsetId", 47, 1, pygen_variable_caps_Addresses, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, + {"ExplicitInterpAMD", 4999, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"OverrideCoverageNV", 5248, 1, pygen_variable_caps_SampleMaskOverrideCoverageNV, 1, pygen_variable_exts_SPV_NV_sample_mask_override_coverage, {}, 0xffffffffu}, + {"PassthroughNV", 5250, 1, pygen_variable_caps_GeometryShaderPassthroughNV, 1, pygen_variable_exts_SPV_NV_geometry_shader_passthrough, {}, 0xffffffffu}, + {"ViewportRelativeNV", 5252, 1, pygen_variable_caps_ShaderViewportMaskNV, 0, nullptr, {}, 0xffffffffu}, + {"SecondaryViewportRelativeNV", 5256, 1, pygen_variable_caps_ShaderStereoViewNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"NonUniformEXT", 5300, 1, pygen_variable_caps_ShaderNonUniformEXT, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HlslCounterBufferGOOGLE", 5634, 0, nullptr, 1, pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1, {SPV_OPERAND_TYPE_ID}, 0xffffffffu}, + {"HlslSemanticGOOGLE", 5635, 0, nullptr, 1, pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0xffffffffu} +}; + +static const spv_operand_desc_t pygen_variable_BuiltInEntries[] = { + {"Position", 0, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PointSize", 1, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ClipDistance", 3, 1, pygen_variable_caps_ClipDistance, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CullDistance", 4, 1, pygen_variable_caps_CullDistance, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VertexId", 5, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InstanceId", 6, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PrimitiveId", 7, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InvocationId", 8, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Layer", 9, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ViewportIndex", 10, 1, pygen_variable_caps_MultiViewport, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TessLevelOuter", 11, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TessLevelInner", 12, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TessCoord", 13, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PatchVertices", 14, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FragCoord", 15, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PointCoord", 16, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FrontFacing", 17, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampleId", 18, 1, pygen_variable_caps_SampleRateShading, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SamplePosition", 19, 1, pygen_variable_caps_SampleRateShading, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampleMask", 20, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FragDepth", 22, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HelperInvocation", 23, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NumWorkgroups", 24, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorkgroupSize", 25, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorkgroupId", 26, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LocalInvocationId", 27, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GlobalInvocationId", 28, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LocalInvocationIndex", 29, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorkDim", 30, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GlobalSize", 31, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"EnqueuedWorkgroupSize", 32, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GlobalOffset", 33, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GlobalLinearId", 34, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupSize", 36, 3, pygen_variable_caps_KernelGroupNonUniformSubgroupBallotKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupMaxSize", 37, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NumSubgroups", 38, 2, pygen_variable_caps_KernelGroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NumEnqueuedSubgroups", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupId", 40, 2, pygen_variable_caps_KernelGroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupLocalInvocationId", 41, 3, pygen_variable_caps_KernelGroupNonUniformSubgroupBallotKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VertexIndex", 42, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InstanceIndex", 43, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupEqMask", 4416, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupEqMaskKHR", 4416, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupGeMask", 4417, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupGeMaskKHR", 4417, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupGtMask", 4418, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupGtMaskKHR", 4418, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupLeMask", 4419, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupLeMaskKHR", 4419, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupLtMask", 4420, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupLtMaskKHR", 4420, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"BaseVertex", 4424, 1, pygen_variable_caps_DrawParameters, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"BaseInstance", 4425, 1, pygen_variable_caps_DrawParameters, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"DrawIndex", 4426, 1, pygen_variable_caps_DrawParameters, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"DeviceIndex", 4438, 1, pygen_variable_caps_DeviceGroup, 1, pygen_variable_exts_SPV_KHR_device_group, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"ViewIndex", 4440, 1, pygen_variable_caps_MultiView, 1, pygen_variable_exts_SPV_KHR_multiview, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"BaryCoordNoPerspAMD", 4992, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"BaryCoordNoPerspCentroidAMD", 4993, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"BaryCoordNoPerspSampleAMD", 4994, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"BaryCoordSmoothAMD", 4995, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"BaryCoordSmoothCentroidAMD", 4996, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"BaryCoordSmoothSampleAMD", 4997, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"BaryCoordPullModelAMD", 4998, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, + {"FragStencilRefEXT", 5014, 1, pygen_variable_caps_StencilExportEXT, 1, pygen_variable_exts_SPV_EXT_shader_stencil_export, {}, 0xffffffffu}, + {"ViewportMaskNV", 5253, 1, pygen_variable_caps_ShaderViewportMaskNV, 0, nullptr, {}, 0xffffffffu}, + {"SecondaryPositionNV", 5257, 1, pygen_variable_caps_ShaderStereoViewNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {}, 0xffffffffu}, + {"SecondaryViewportMaskNV", 5258, 1, pygen_variable_caps_ShaderStereoViewNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {}, 0xffffffffu}, + {"PositionPerViewNV", 5261, 1, pygen_variable_caps_PerViewAttributesNV, 0, nullptr, {}, 0xffffffffu}, + {"ViewportMaskPerViewNV", 5262, 1, pygen_variable_caps_PerViewAttributesNV, 0, nullptr, {}, 0xffffffffu}, + {"FullyCoveredEXT", 5264, 1, pygen_variable_caps_FragmentFullyCoveredEXT, 1, pygen_variable_exts_SPV_EXT_fragment_fully_covered, {}, 0xffffffffu} +}; + +static const spv_operand_desc_t pygen_variable_ScopeEntries[] = { + {"CrossDevice", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Device", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Workgroup", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Subgroup", 3, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Invocation", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_GroupOperationEntries[] = { + {"Reduce", 0, 3, pygen_variable_caps_KernelGroupNonUniformArithmeticGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InclusiveScan", 1, 3, pygen_variable_caps_KernelGroupNonUniformArithmeticGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ExclusiveScan", 2, 3, pygen_variable_caps_KernelGroupNonUniformArithmeticGroupNonUniformBallot, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ClusteredReduce", 3, 1, pygen_variable_caps_GroupNonUniformClustered, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"PartitionedReduceNV", 6, 1, pygen_variable_caps_GroupNonUniformPartitionedNV, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, {}, 0xffffffffu}, + {"PartitionedInclusiveScanNV", 7, 1, pygen_variable_caps_GroupNonUniformPartitionedNV, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, {}, 0xffffffffu}, + {"PartitionedExclusiveScanNV", 8, 1, pygen_variable_caps_GroupNonUniformPartitionedNV, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, {}, 0xffffffffu} +}; + +static const spv_operand_desc_t pygen_variable_KernelEnqueueFlagsEntries[] = { + {"NoWait", 0, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WaitKernel", 1, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WaitWorkGroup", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { + {"Matrix", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Shader", 1, 1, pygen_variable_caps_Matrix, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Geometry", 2, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Tessellation", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Addresses", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Linkage", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Kernel", 6, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Vector16", 7, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Float16Buffer", 8, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Float16", 9, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Float64", 10, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Int64", 11, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Int64Atomics", 12, 1, pygen_variable_caps_Int64, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageBasic", 13, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageReadWrite", 14, 1, pygen_variable_caps_ImageBasic, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageMipmap", 15, 1, pygen_variable_caps_ImageBasic, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Pipes", 17, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Groups", 18, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DeviceEnqueue", 19, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LiteralSampler", 20, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AtomicStorage", 21, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Int16", 22, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TessellationPointSize", 23, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GeometryPointSize", 24, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageGatherExtended", 25, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageImageMultisample", 27, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UniformBufferArrayDynamicIndexing", 28, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampledImageArrayDynamicIndexing", 29, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageBufferArrayDynamicIndexing", 30, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageImageArrayDynamicIndexing", 31, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ClipDistance", 32, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CullDistance", 33, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageCubeArray", 34, 1, pygen_variable_caps_SampledCubeArray, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampleRateShading", 35, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageRect", 36, 1, pygen_variable_caps_SampledRect, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampledRect", 37, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GenericPointer", 38, 1, pygen_variable_caps_Addresses, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Int8", 39, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InputAttachment", 40, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SparseResidency", 41, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MinLod", 42, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Sampled1D", 43, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Image1D", 44, 1, pygen_variable_caps_Sampled1D, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampledCubeArray", 45, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SampledBuffer", 46, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageBuffer", 47, 1, pygen_variable_caps_SampledBuffer, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageMSArray", 48, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageImageExtendedFormats", 49, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ImageQuery", 50, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"DerivativeControl", 51, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InterpolationFunction", 52, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TransformFeedback", 53, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"GeometryStreams", 54, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageImageReadWithoutFormat", 55, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StorageImageWriteWithoutFormat", 56, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MultiViewport", 57, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SubgroupDispatch", 58, 1, pygen_variable_caps_DeviceEnqueue, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"NamedBarrier", 59, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"PipeStorage", 60, 1, pygen_variable_caps_Pipes, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,1)}, + {"GroupNonUniform", 61, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformVote", 62, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformArithmetic", 63, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformBallot", 64, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformShuffle", 65, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformShuffleRelative", 66, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformClustered", 67, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"GroupNonUniformQuad", 68, 1, pygen_variable_caps_GroupNonUniform, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupBallotKHR", 4423, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, 0xffffffffu}, + {"DrawParameters", 4427, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"SubgroupVoteKHR", 4431, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, {}, 0xffffffffu}, + {"StorageBuffer16BitAccess", 4433, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_16bit_storage, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"StorageUniformBufferBlock16", 4433, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_16bit_storage, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"StorageUniform16", 4434, 2, pygen_variable_caps_StorageBuffer16BitAccessStorageUniformBufferBlock16, 1, pygen_variable_exts_SPV_KHR_16bit_storage, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"UniformAndStorageBuffer16BitAccess", 4434, 2, pygen_variable_caps_StorageBuffer16BitAccessStorageUniformBufferBlock16, 1, pygen_variable_exts_SPV_KHR_16bit_storage, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"StoragePushConstant16", 4435, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_16bit_storage, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"StorageInputOutput16", 4436, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_16bit_storage, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"DeviceGroup", 4437, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_device_group, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"MultiView", 4439, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_KHR_multiview, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"VariablePointersStorageBuffer", 4441, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_KHR_variable_pointers, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"VariablePointers", 4442, 1, pygen_variable_caps_VariablePointersStorageBuffer, 1, pygen_variable_exts_SPV_KHR_variable_pointers, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"AtomicStorageOps", 4445, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_shader_atomic_counter_ops, {}, 0xffffffffu}, + {"SampleMaskPostDepthCoverage", 4447, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_post_depth_coverage, {}, 0xffffffffu}, + {"StorageBuffer8BitAccess", 4448, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_8bit_storage, {}, 0xffffffffu}, + {"UniformAndStorageBuffer8BitAccess", 4449, 1, pygen_variable_caps_StorageBuffer8BitAccess, 1, pygen_variable_exts_SPV_KHR_8bit_storage, {}, 0xffffffffu}, + {"StoragePushConstant8", 4450, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_8bit_storage, {}, 0xffffffffu}, + {"Float16ImageAMD", 5008, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_gpu_shader_half_float_fetch, {}, 0xffffffffu}, + {"ImageGatherBiasLodAMD", 5009, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_texture_gather_bias_lod, {}, 0xffffffffu}, + {"FragmentMaskAMD", 5010, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, {}, 0xffffffffu}, + {"StencilExportEXT", 5013, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_stencil_export, {}, 0xffffffffu}, + {"ImageReadWriteLodAMD", 5015, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_shader_image_load_store_lod, {}, 0xffffffffu}, + {"SampleMaskOverrideCoverageNV", 5249, 1, pygen_variable_caps_SampleRateShading, 1, pygen_variable_exts_SPV_NV_sample_mask_override_coverage, {}, 0xffffffffu}, + {"GeometryShaderPassthroughNV", 5251, 1, pygen_variable_caps_Geometry, 1, pygen_variable_exts_SPV_NV_geometry_shader_passthrough, {}, 0xffffffffu}, + {"ShaderViewportIndexLayerEXT", 5254, 1, pygen_variable_caps_MultiViewport, 1, pygen_variable_exts_SPV_EXT_shader_viewport_index_layer, {}, 0xffffffffu}, + {"ShaderViewportIndexLayerNV", 5254, 1, pygen_variable_caps_MultiViewport, 1, pygen_variable_exts_SPV_NV_viewport_array2, {}, 0xffffffffu}, + {"ShaderViewportMaskNV", 5255, 1, pygen_variable_caps_ShaderViewportIndexLayerNV, 1, pygen_variable_exts_SPV_NV_viewport_array2, {}, 0xffffffffu}, + {"ShaderStereoViewNV", 5259, 1, pygen_variable_caps_ShaderViewportMaskNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {}, 0xffffffffu}, + {"PerViewAttributesNV", 5260, 1, pygen_variable_caps_MultiView, 1, pygen_variable_exts_SPV_NVX_multiview_per_view_attributes, {}, 0xffffffffu}, + {"FragmentFullyCoveredEXT", 5265, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_fragment_fully_covered, {}, 0xffffffffu}, + {"GroupNonUniformPartitionedNV", 5297, 0, nullptr, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, {}, 0xffffffffu}, + {"ShaderNonUniformEXT", 5301, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"RuntimeDescriptorArrayEXT", 5302, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"InputAttachmentArrayDynamicIndexingEXT", 5303, 1, pygen_variable_caps_InputAttachment, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"UniformTexelBufferArrayDynamicIndexingEXT", 5304, 1, pygen_variable_caps_SampledBuffer, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"StorageTexelBufferArrayDynamicIndexingEXT", 5305, 1, pygen_variable_caps_ImageBuffer, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"UniformBufferArrayNonUniformIndexingEXT", 5306, 1, pygen_variable_caps_ShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"SampledImageArrayNonUniformIndexingEXT", 5307, 1, pygen_variable_caps_ShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"StorageBufferArrayNonUniformIndexingEXT", 5308, 1, pygen_variable_caps_ShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"StorageImageArrayNonUniformIndexingEXT", 5309, 1, pygen_variable_caps_ShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"InputAttachmentArrayNonUniformIndexingEXT", 5310, 2, pygen_variable_caps_InputAttachmentShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"UniformTexelBufferArrayNonUniformIndexingEXT", 5311, 2, pygen_variable_caps_SampledBufferShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"StorageTexelBufferArrayNonUniformIndexingEXT", 5312, 2, pygen_variable_caps_ImageBufferShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"SubgroupShuffleINTEL", 5568, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_subgroups, {}, 0xffffffffu}, + {"SubgroupBufferBlockIOINTEL", 5569, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_subgroups, {}, 0xffffffffu}, + {"SubgroupImageBlockIOINTEL", 5570, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_subgroups, {}, 0xffffffffu} +}; + +static const spv_operand_desc_t pygen_variable_DebugInfoFlagsEntries[] = { + {"FlagIsProtected", 0x01, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagIsPrivate", 0x02, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagIsPublic", 0x03, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagIsLocal", 0x04, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagIsDefinition", 0x08, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagFwdDecl", 0x10, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagArtificial", 0x20, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagExplicit", 0x40, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagPrototyped", 0x80, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagObjectPointer", 0x100, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagStaticMember", 0x200, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagIndirectVariable", 0x400, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagLValueReference", 0x800, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagRValueReference", 0x1000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"FlagIsOptimized", 0x2000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_DebugBaseTypeAttributeEncodingEntries[] = { + {"Unspecified", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Address", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Boolean", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Float", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Signed", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"SignedChar", 6, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Unsigned", 7, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"UnsignedChar", 8, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_DebugCompositeTypeEntries[] = { + {"Class", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Structure", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Union", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_DebugTypeQualifierEntries[] = { + {"ConstType", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VolatileType", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RestrictType", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_t pygen_variable_DebugOperationEntries[] = { + {"Deref", 0, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Plus", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Minus", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PlusUconst", 3, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"BitPiece", 4, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Swap", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Xderef", 6, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"StackValue", 7, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Constu", 8, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)} +}; + +static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = { + {SPV_OPERAND_TYPE_IMAGE, ARRAY_SIZE(pygen_variable_ImageOperandsEntries), pygen_variable_ImageOperandsEntries}, + {SPV_OPERAND_TYPE_FP_FAST_MATH_MODE, ARRAY_SIZE(pygen_variable_FPFastMathModeEntries), pygen_variable_FPFastMathModeEntries}, + {SPV_OPERAND_TYPE_SELECTION_CONTROL, ARRAY_SIZE(pygen_variable_SelectionControlEntries), pygen_variable_SelectionControlEntries}, + {SPV_OPERAND_TYPE_LOOP_CONTROL, ARRAY_SIZE(pygen_variable_LoopControlEntries), pygen_variable_LoopControlEntries}, + {SPV_OPERAND_TYPE_FUNCTION_CONTROL, ARRAY_SIZE(pygen_variable_FunctionControlEntries), pygen_variable_FunctionControlEntries}, + {SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, ARRAY_SIZE(pygen_variable_MemorySemanticsEntries), pygen_variable_MemorySemanticsEntries}, + {SPV_OPERAND_TYPE_MEMORY_ACCESS, ARRAY_SIZE(pygen_variable_MemoryAccessEntries), pygen_variable_MemoryAccessEntries}, + {SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO, ARRAY_SIZE(pygen_variable_KernelProfilingInfoEntries), pygen_variable_KernelProfilingInfoEntries}, + {SPV_OPERAND_TYPE_SOURCE_LANGUAGE, ARRAY_SIZE(pygen_variable_SourceLanguageEntries), pygen_variable_SourceLanguageEntries}, + {SPV_OPERAND_TYPE_EXECUTION_MODEL, ARRAY_SIZE(pygen_variable_ExecutionModelEntries), pygen_variable_ExecutionModelEntries}, + {SPV_OPERAND_TYPE_ADDRESSING_MODEL, ARRAY_SIZE(pygen_variable_AddressingModelEntries), pygen_variable_AddressingModelEntries}, + {SPV_OPERAND_TYPE_MEMORY_MODEL, ARRAY_SIZE(pygen_variable_MemoryModelEntries), pygen_variable_MemoryModelEntries}, + {SPV_OPERAND_TYPE_EXECUTION_MODE, ARRAY_SIZE(pygen_variable_ExecutionModeEntries), pygen_variable_ExecutionModeEntries}, + {SPV_OPERAND_TYPE_STORAGE_CLASS, ARRAY_SIZE(pygen_variable_StorageClassEntries), pygen_variable_StorageClassEntries}, + {SPV_OPERAND_TYPE_DIMENSIONALITY, ARRAY_SIZE(pygen_variable_DimEntries), pygen_variable_DimEntries}, + {SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE, ARRAY_SIZE(pygen_variable_SamplerAddressingModeEntries), pygen_variable_SamplerAddressingModeEntries}, + {SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE, ARRAY_SIZE(pygen_variable_SamplerFilterModeEntries), pygen_variable_SamplerFilterModeEntries}, + {SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT, ARRAY_SIZE(pygen_variable_ImageFormatEntries), pygen_variable_ImageFormatEntries}, + {SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER, ARRAY_SIZE(pygen_variable_ImageChannelOrderEntries), pygen_variable_ImageChannelOrderEntries}, + {SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE, ARRAY_SIZE(pygen_variable_ImageChannelDataTypeEntries), pygen_variable_ImageChannelDataTypeEntries}, + {SPV_OPERAND_TYPE_FP_ROUNDING_MODE, ARRAY_SIZE(pygen_variable_FPRoundingModeEntries), pygen_variable_FPRoundingModeEntries}, + {SPV_OPERAND_TYPE_LINKAGE_TYPE, ARRAY_SIZE(pygen_variable_LinkageTypeEntries), pygen_variable_LinkageTypeEntries}, + {SPV_OPERAND_TYPE_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries}, + {SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE, ARRAY_SIZE(pygen_variable_FunctionParameterAttributeEntries), pygen_variable_FunctionParameterAttributeEntries}, + {SPV_OPERAND_TYPE_DECORATION, ARRAY_SIZE(pygen_variable_DecorationEntries), pygen_variable_DecorationEntries}, + {SPV_OPERAND_TYPE_BUILT_IN, ARRAY_SIZE(pygen_variable_BuiltInEntries), pygen_variable_BuiltInEntries}, + {SPV_OPERAND_TYPE_SCOPE_ID, ARRAY_SIZE(pygen_variable_ScopeEntries), pygen_variable_ScopeEntries}, + {SPV_OPERAND_TYPE_GROUP_OPERATION, ARRAY_SIZE(pygen_variable_GroupOperationEntries), pygen_variable_GroupOperationEntries}, + {SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS, ARRAY_SIZE(pygen_variable_KernelEnqueueFlagsEntries), pygen_variable_KernelEnqueueFlagsEntries}, + {SPV_OPERAND_TYPE_CAPABILITY, ARRAY_SIZE(pygen_variable_CapabilityEntries), pygen_variable_CapabilityEntries}, + {SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, ARRAY_SIZE(pygen_variable_DebugInfoFlagsEntries), pygen_variable_DebugInfoFlagsEntries}, + {SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, ARRAY_SIZE(pygen_variable_DebugBaseTypeAttributeEncodingEntries), pygen_variable_DebugBaseTypeAttributeEncodingEntries}, + {SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE, ARRAY_SIZE(pygen_variable_DebugCompositeTypeEntries), pygen_variable_DebugCompositeTypeEntries}, + {SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER, ARRAY_SIZE(pygen_variable_DebugTypeQualifierEntries), pygen_variable_DebugTypeQualifierEntries}, + {SPV_OPERAND_TYPE_DEBUG_OPERATION, ARRAY_SIZE(pygen_variable_DebugOperationEntries), pygen_variable_DebugOperationEntries}, + {SPV_OPERAND_TYPE_OPTIONAL_IMAGE, ARRAY_SIZE(pygen_variable_ImageOperandsEntries), pygen_variable_ImageOperandsEntries}, + {SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, ARRAY_SIZE(pygen_variable_MemoryAccessEntries), pygen_variable_MemoryAccessEntries}, + {SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries} +}; diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/DependInfo.cmake new file mode 100644 index 000000000..2f7cbc19a --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/DependInfo.cmake @@ -0,0 +1,103 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + "SPIRV_TOOLS_IMPLEMENTATION" + "SPIRV_TOOLS_SHAREDLIB" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "../include" + "." + "../external/SPIRV-Headers/include" + ) + +# Pairs of files generated by the same build rule. +set(CMAKE_MULTIPLE_OUTPUT_PAIRS + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/enum_string_mapping.inc" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/extension_enum.inc" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/operand.kinds-unified1.inc" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/core.insts-unified1.inc" + ) + + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/build.make new file mode 100644 index 000000000..a57a3fee7 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/build.make @@ -0,0 +1,1883 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include source/CMakeFiles/SPIRV-Tools-shared.dir/depend.make + +# Include the progress variables for this target. +include source/CMakeFiles/SPIRV-Tools-shared.dir/progress.make + +# Include the compile flags for this target's objects. +include source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make + +extension_enum.inc: ../utils/generate_grammar_tables.py +extension_enum.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +extension_enum.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate enum-string mapping for SPIR-V vunified1." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --spirv-core-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json --extinst-debuginfo-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --extension-enum-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/extension_enum.inc --enum-string-mapping-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/enum_string_mapping.inc + +enum_string_mapping.inc: extension_enum.inc + @$(CMAKE_COMMAND) -E touch_nocreate enum_string_mapping.inc + +opencl.std.insts.inc: ../utils/generate_grammar_tables.py +opencl.std.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +opencl.std.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Generate info tables for OpenCL extended instructions and operands vunified1." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-opencl-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json --opencl-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/opencl.std.insts.inc + +glsl.std.450.insts.inc: ../utils/generate_grammar_tables.py +glsl.std.450.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +glsl.std.450.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Generate info tables for GLSL extended instructions and operands vunified1." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-glsl-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json --glsl-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/glsl.std.450.insts.inc + +spv-amd-shader-explicit-vertex-parameter.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-explicit-vertex-parameter.insts.inc: ../source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Generate extended instruction tables for spv-amd-shader-explicit-vertex-parameter." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-explicit-vertex-parameter.insts.inc + +spv-amd-shader-trinary-minmax.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-trinary-minmax.insts.inc: ../source/extinst.spv-amd-shader-trinary-minmax.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Generate extended instruction tables for spv-amd-shader-trinary-minmax." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-trinary-minmax.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-trinary-minmax.insts.inc + +spv-amd-gcn-shader.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-gcn-shader.insts.inc: ../source/extinst.spv-amd-gcn-shader.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Generate extended instruction tables for spv-amd-gcn-shader." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-gcn-shader.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-gcn-shader.insts.inc + +spv-amd-shader-ballot.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-ballot.insts.inc: ../source/extinst.spv-amd-shader-ballot.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Generate extended instruction tables for spv-amd-shader-ballot." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-ballot.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-ballot.insts.inc + +debuginfo.insts.inc: ../utils/generate_grammar_tables.py +debuginfo.insts.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Generate extended instruction tables for debuginfo." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/debuginfo.insts.inc + +DebugInfo.h: ../utils/generate_language_headers.py +DebugInfo.h: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Generate language specific header for DebugInfo." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_language_headers.py --extinst-name=DebugInfo --extinst-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --extinst-output-base=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/DebugInfo + +core.insts-unified1.inc: ../utils/generate_grammar_tables.py +core.insts-unified1.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +core.insts-unified1.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Generate info tables for SPIR-V vunified1 core instructions and operands." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --spirv-core-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json --extinst-debuginfo-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --core-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/core.insts-unified1.inc --operand-kinds-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/operand.kinds-unified1.inc + +operand.kinds-unified1.inc: core.insts-unified1.inc + @$(CMAKE_COMMAND) -E touch_nocreate operand.kinds-unified1.inc + +generators.inc: ../utils/generate_registry_tables.py +generators.inc: ../external/SPIRV-Headers/include/spirv/spir-v.xml + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Generate tables based on the SPIR-V XML registry." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_registry_tables.py --xml=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/spir-v.xml --generator-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/generators.inc + +build-version.inc: ../utils/update_build_version.py +build-version.inc: ../CHANGES + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Update build-version.inc in the SPIRV-Tools build directory (if necessary)." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/update_build_version.py /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/build-version.inc + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o: ../source/util/bit_vector.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp > CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o: ../source/util/parse_number.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp > CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o: ../source/util/string_utils.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp > CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o: ../source/assembly_grammar.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp > CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o: ../source/binary.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp > CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o: ../source/diagnostic.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp > CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o: ../source/disassemble.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp > CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o: ../source/enum_string_mapping.cpp +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o: enum_string_mapping.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp > CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: ../source/ext_inst.cpp +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: opencl.std.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: glsl.std.450.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: spv-amd-shader-explicit-vertex-parameter.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: spv-amd-shader-trinary-minmax.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: spv-amd-gcn-shader.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: spv-amd-shader-ballot.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: debuginfo.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o: DebugInfo.h + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp > CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o: ../source/extensions.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp > CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o: ../source/id_descriptor.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp > CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o: ../source/libspirv.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp > CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o: ../source/name_mapper.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp > CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o: ../source/opcode.cpp +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o: core.insts-unified1.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o: generators.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp > CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o: ../source/operand.cpp +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o: operand.kinds-unified1.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp > CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o: ../source/parsed_operand.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp > CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o: ../source/print.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp > CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o: ../source/software_version.cpp +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o: build-version.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp > CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o: ../source/spirv_endian.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_31) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp > CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o: ../source/spirv_optimizer_options.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_32) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp > CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o: ../source/spirv_target_env.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_33) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp > CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o: ../source/spirv_validator_options.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_34) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp > CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o: ../source/table.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_35) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp > CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o: ../source/text.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_36) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp > CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o: ../source/text_handler.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_37) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp > CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o: ../source/val/validate.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_38) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o: ../source/val/validate_adjacency.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_39) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o: ../source/val/validate_annotation.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_40) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o: ../source/val/validate_arithmetics.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_41) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o: ../source/val/validate_atomics.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_42) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o: ../source/val/validate_barriers.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_43) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o: ../source/val/validate_bitwise.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_44) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o: ../source/val/validate_builtins.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_45) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o: ../source/val/validate_capability.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_46) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o: ../source/val/validate_cfg.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_47) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o: ../source/val/validate_composites.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_48) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o: ../source/val/validate_constants.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_49) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o: ../source/val/validate_conversion.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_50) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o: ../source/val/validate_datarules.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_51) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o: ../source/val/validate_debug.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_52) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o: ../source/val/validate_decorations.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_53) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o: ../source/val/validate_derivatives.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_54) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o: ../source/val/validate_ext_inst.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_55) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o: ../source/val/validate_execution_limitations.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_56) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o: ../source/val/validate_function.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_57) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o: ../source/val/validate_id.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_58) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o: ../source/val/validate_image.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_59) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o: ../source/val/validate_interfaces.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_60) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o: ../source/val/validate_instruction.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_61) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o: ../source/val/validate_layout.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_62) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o: ../source/val/validate_literals.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_63) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o: ../source/val/validate_logicals.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_64) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o: ../source/val/validate_memory.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_65) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o: ../source/val/validate_mode_setting.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_66) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o: ../source/val/validate_non_uniform.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_67) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o: ../source/val/validate_primitives.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_68) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o: ../source/val/validate_type.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_69) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o: ../source/val/basic_block.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_70) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o: ../source/val/construct.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_71) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o: ../source/val/function.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_72) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o: ../source/val/instruction.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_73) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o: ../source/val/validation_state.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_74) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp > CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o + + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o: source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o: ../source/util/timer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_75) "Building CXX object source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp > CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.i + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp -o CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.s + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.provides: source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o + + +# Object files for target SPIRV-Tools-shared +SPIRV__Tools__shared_OBJECTS = \ +"CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o" \ +"CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o" + +# External object files for target SPIRV-Tools-shared +SPIRV__Tools__shared_EXTERNAL_OBJECTS = + +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/build.make +source/libSPIRV-Tools-shared.so: source/CMakeFiles/SPIRV-Tools-shared.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_76) "Linking CXX shared library libSPIRV-Tools-shared.so" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/SPIRV-Tools-shared.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +source/CMakeFiles/SPIRV-Tools-shared.dir/build: source/libSPIRV-Tools-shared.so + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/build + +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o.requires +source/CMakeFiles/SPIRV-Tools-shared.dir/requires: source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o.requires + +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/requires + +source/CMakeFiles/SPIRV-Tools-shared.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools-shared.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/clean + +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: extension_enum.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: enum_string_mapping.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: opencl.std.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: glsl.std.450.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: spv-amd-shader-explicit-vertex-parameter.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: spv-amd-shader-trinary-minmax.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: spv-amd-gcn-shader.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: spv-amd-shader-ballot.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: debuginfo.insts.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: DebugInfo.h +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: core.insts-unified1.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: operand.kinds-unified1.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: generators.inc +source/CMakeFiles/SPIRV-Tools-shared.dir/depend: build-version.inc + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/cmake_clean.cmake new file mode 100644 index 000000000..5a2f81137 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/cmake_clean.cmake @@ -0,0 +1,86 @@ +file(REMOVE_RECURSE + "../extension_enum.inc" + "../enum_string_mapping.inc" + "../opencl.std.insts.inc" + "../glsl.std.450.insts.inc" + "../spv-amd-shader-explicit-vertex-parameter.insts.inc" + "../spv-amd-shader-trinary-minmax.insts.inc" + "../spv-amd-gcn-shader.insts.inc" + "../spv-amd-shader-ballot.insts.inc" + "../debuginfo.insts.inc" + "../DebugInfo.h" + "../core.insts-unified1.inc" + "../operand.kinds-unified1.inc" + "../generators.inc" + "../build-version.inc" + "CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o" + "CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o" + "libSPIRV-Tools-shared.pdb" + "libSPIRV-Tools-shared.so" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/SPIRV-Tools-shared.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/depend.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/depend.make new file mode 100644 index 000000000..19ef83551 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for SPIRV-Tools-shared. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make new file mode 100644 index 000000000..a8fbff8cf --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIC -fvisibility=hidden -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED -DSPIRV_TOOLS_IMPLEMENTATION -DSPIRV_TOOLS_SHAREDLIB -DSPIRV_Tools_shared_EXPORTS + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/link.txt b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/link.txt new file mode 100644 index 000000000..41a37933a --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -fPIC -g -shared -Wl,-soname,libSPIRV-Tools-shared.so -o libSPIRV-Tools-shared.so CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/progress.make new file mode 100644 index 000000000..a112fa159 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools-shared.dir/progress.make @@ -0,0 +1,77 @@ +CMAKE_PROGRESS_1 = 61 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 62 +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = 63 +CMAKE_PROGRESS_8 = +CMAKE_PROGRESS_9 = 64 +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = +CMAKE_PROGRESS_12 = 65 +CMAKE_PROGRESS_13 = +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = 66 +CMAKE_PROGRESS_16 = +CMAKE_PROGRESS_17 = 67 +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = +CMAKE_PROGRESS_20 = 68 +CMAKE_PROGRESS_21 = +CMAKE_PROGRESS_22 = +CMAKE_PROGRESS_23 = 69 +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = 70 +CMAKE_PROGRESS_26 = +CMAKE_PROGRESS_27 = +CMAKE_PROGRESS_28 = 71 +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = +CMAKE_PROGRESS_31 = 72 +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = 73 +CMAKE_PROGRESS_34 = +CMAKE_PROGRESS_35 = +CMAKE_PROGRESS_36 = 74 +CMAKE_PROGRESS_37 = +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = 75 +CMAKE_PROGRESS_40 = +CMAKE_PROGRESS_41 = 76 +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = +CMAKE_PROGRESS_44 = 77 +CMAKE_PROGRESS_45 = +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = 78 +CMAKE_PROGRESS_48 = +CMAKE_PROGRESS_49 = 79 +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = +CMAKE_PROGRESS_52 = 80 +CMAKE_PROGRESS_53 = +CMAKE_PROGRESS_54 = +CMAKE_PROGRESS_55 = 81 +CMAKE_PROGRESS_56 = +CMAKE_PROGRESS_57 = 82 +CMAKE_PROGRESS_58 = +CMAKE_PROGRESS_59 = +CMAKE_PROGRESS_60 = 83 +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = +CMAKE_PROGRESS_63 = 84 +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = 85 +CMAKE_PROGRESS_66 = +CMAKE_PROGRESS_67 = +CMAKE_PROGRESS_68 = 86 +CMAKE_PROGRESS_69 = +CMAKE_PROGRESS_70 = +CMAKE_PROGRESS_71 = 87 +CMAKE_PROGRESS_72 = +CMAKE_PROGRESS_73 = 88 +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = +CMAKE_PROGRESS_76 = 89 + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/CXX.includecache b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/CXX.includecache new file mode 100644 index 000000000..01ea803f6 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/CXX.includecache @@ -0,0 +1,1660 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +..//source/assembly_grammar.h +source/enum_set.h +../source/source/enum_set.h +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h +source/operand.h +../source/source/operand.h +source/table.h +../source/source/table.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/binary.h +source/spirv_definition.h +../source/source/spirv_definition.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/cfa.h +algorithm +- +cassert +- +cstdint +- +functional +- +map +- +unordered_map +- +unordered_set +- +utility +- +vector +- + +..//source/diagnostic.h +sstream +- +string +- +spirv-tools/libspirv.hpp +../source/spirv-tools/libspirv.hpp + +..//source/disassemble.h +string +- +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/enum_set.h +cstdint +- +functional +- +memory +- +set +- +utility +- +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h +source/util/make_unique.h +../source/source/util/make_unique.h + +..//source/enum_string_mapping.h +string +- +source/extensions.h +../source/source/extensions.h +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h + +..//source/ext_inst.h +source/table.h +../source/source/table.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/extensions.h +string +- +source/enum_set.h +../source/source/enum_set.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h +extension_enum.inc +../source/extension_enum.inc + +..//source/id_descriptor.h +unordered_map +- +vector +- +spirv-tools/libspirv.hpp +../source/spirv-tools/libspirv.hpp + +..//source/instruction.h +cstdint +- +vector +- +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/latest_version_glsl_std_450_header.h +spirv/unified1/GLSL.std.450.h +../source/spirv/unified1/GLSL.std.450.h + +..//source/latest_version_opencl_std_header.h +spirv/unified1/OpenCL.std.h +../source/spirv/unified1/OpenCL.std.h + +..//source/latest_version_spirv_header.h +spirv/unified1/spirv.h +../source/spirv/unified1/spirv.h + +..//source/macro.h + +..//source/name_mapper.h +functional +- +string +- +unordered_map +- +unordered_set +- +source/assembly_grammar.h +../source/source/assembly_grammar.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/opcode.h +source/instruction.h +../source/source/instruction.h +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h +source/table.h +../source/source/table.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/operand.h +functional +- +vector +- +source/table.h +../source/source/table.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/parsed_operand.h +ostream +- +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/print.h +iostream +- +sstream +- + +..//source/spirv_constant.h +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/spirv_definition.h +cstdint +- +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h + +..//source/spirv_endian.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/spirv_optimizer_options.h +source/spirv_validator_options.h +../source/source/spirv_validator_options.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/spirv_target_env.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/spirv_validator_options.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/table.h +source/latest_version_spirv_header.h +../source/source/latest_version_spirv_header.h +source/extensions.h +../source/source/extensions.h +spirv-tools/libspirv.hpp +../source/spirv-tools/libspirv.hpp + +..//source/text.h +string +- +source/operand.h +../source/source/operand.h +source/spirv_constant.h +../source/source/spirv_constant.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/text_handler.h +iomanip +- +set +- +sstream +- +string +- +type_traits +- +unordered_map +- +utility +- +source/diagnostic.h +../source/source/diagnostic.h +source/instruction.h +../source/source/instruction.h +source/text.h +../source/source/text.h +spirv-tools/libspirv.h +../source/spirv-tools/libspirv.h + +..//source/util/bit_vector.h +cstdint +- +iosfwd +- +vector +- + +..//source/util/bitutils.h +cstdint +- +cstring +- + +..//source/util/hex_float.h +cassert +- +cctype +- +cmath +- +cstdint +- +iomanip +- +limits +- +sstream +- +vector +- +source/util/bitutils.h +../source/util/source/util/bitutils.h + +..//source/util/make_unique.h +memory +- +utility +- + +..//source/util/parse_number.h +functional +- +string +- +tuple +- +source/util/hex_float.h +../source/util/source/util/hex_float.h +spirv-tools/libspirv.h +../source/util/spirv-tools/libspirv.h + +..//source/util/string_utils.h +sstream +- +string +- +source/util/string_utils.h +../source/util/source/util/string_utils.h + +..//source/util/timer.h +sys/resource.h +- +cassert +- +iostream +- + +..//source/val/basic_block.h +cstdint +- +bitset +- +functional +- +memory +- +vector +- +source/latest_version_spirv_header.h +../source/val/source/latest_version_spirv_header.h + +..//source/val/construct.h +cstdint +- +set +- +vector +- +source/val/basic_block.h +../source/val/source/val/basic_block.h + +..//source/val/decoration.h +cstdint +- +unordered_map +- +vector +- +source/latest_version_spirv_header.h +../source/val/source/latest_version_spirv_header.h + +..//source/val/function.h +functional +- +list +- +map +- +set +- +string +- +unordered_map +- +unordered_set +- +utility +- +vector +- +source/latest_version_spirv_header.h +../source/val/source/latest_version_spirv_header.h +source/val/basic_block.h +../source/val/source/val/basic_block.h +source/val/construct.h +../source/val/source/val/construct.h +spirv-tools/libspirv.h +../source/val/spirv-tools/libspirv.h + +..//source/val/instruction.h +cassert +- +cstdint +- +functional +- +utility +- +vector +- +source/table.h +../source/val/source/table.h +spirv-tools/libspirv.h +../source/val/spirv-tools/libspirv.h + +..//source/val/validate.h +functional +- +memory +- +utility +- +vector +- +source/instruction.h +../source/val/source/instruction.h +source/table.h +../source/val/source/table.h +spirv-tools/libspirv.h +../source/val/spirv-tools/libspirv.h + +..//source/val/validation_state.h +map +- +set +- +string +- +tuple +- +unordered_map +- +unordered_set +- +vector +- +source/assembly_grammar.h +../source/val/source/assembly_grammar.h +source/diagnostic.h +../source/val/source/diagnostic.h +source/disassemble.h +../source/val/source/disassemble.h +source/enum_set.h +../source/val/source/enum_set.h +source/latest_version_spirv_header.h +../source/val/source/latest_version_spirv_header.h +source/spirv_definition.h +../source/val/source/spirv_definition.h +source/spirv_validator_options.h +../source/val/source/spirv_validator_options.h +source/val/decoration.h +../source/val/source/val/decoration.h +source/val/function.h +../source/val/source/val/function.h +source/val/instruction.h +../source/val/source/val/instruction.h +spirv-tools/libspirv.h +../source/val/spirv-tools/libspirv.h + +../external/SPIRV-Headers/include/spirv/unified1/GLSL.std.450.h + +../external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h + +../external/SPIRV-Headers/include/spirv/unified1/spirv.h + +../include/spirv-tools/libspirv.h +stdbool.h +- +stddef.h +- +stdint.h +- + +../include/spirv-tools/libspirv.hpp +functional +- +memory +- +string +- +vector +- +spirv-tools/libspirv.h +../include/spirv-tools/spirv-tools/libspirv.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp +source/assembly_grammar.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/assembly_grammar.h +algorithm +- +cassert +- +cstring +- +source/ext_inst.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/ext_inst.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/operand.h +source/table.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/table.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp +source/binary.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/binary.h +algorithm +- +cassert +- +cstring +- +iterator +- +limits +- +string +- +unordered_map +- +vector +- +source/assembly_grammar.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/assembly_grammar.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/diagnostic.h +source/ext_inst.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/ext_inst.h +source/latest_version_spirv_header.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/latest_version_spirv_header.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/operand.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_constant.h +source/spirv_endian.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_endian.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/diagnostic.h +cassert +- +cstring +- +iostream +- +sstream +- +utility +- +source/table.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/table.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp +algorithm +- +cassert +- +cstring +- +iomanip +- +memory +- +unordered_map +- +utility +- +source/assembly_grammar.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/assembly_grammar.h +source/binary.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/binary.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/diagnostic.h +source/disassemble.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/disassemble.h +source/ext_inst.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/ext_inst.h +source/name_mapper.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/name_mapper.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +source/parsed_operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/parsed_operand.h +source/print.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/print.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_constant.h +source/spirv_endian.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_endian.h +source/util/hex_float.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/hex_float.h +source/util/make_unique.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/make_unique.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp +source/enum_string_mapping.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/enum_string_mapping.h +algorithm +- +cassert +- +cstring +- +string +- +unordered_map +- +source/extensions.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/extensions.h +enum_string_mapping.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.inc + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp +source/ext_inst.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/ext_inst.h +cassert +- +cstring +- +DebugInfo.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/DebugInfo.h +source/latest_version_glsl_std_450_header.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/latest_version_glsl_std_450_header.h +source/latest_version_opencl_std_header.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/latest_version_opencl_std_header.h +source/macro.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/macro.h +source/spirv_definition.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_definition.h +debuginfo.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/debuginfo.insts.inc +glsl.std.450.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/glsl.std.450.insts.inc +opencl.std.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opencl.std.insts.inc +spv-amd-gcn-shader.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spv-amd-gcn-shader.insts.inc +spv-amd-shader-ballot.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spv-amd-shader-ballot.insts.inc +spv-amd-shader-explicit-vertex-parameter.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spv-amd-shader-explicit-vertex-parameter.insts.inc +spv-amd-shader-trinary-minmax.insts.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spv-amd-shader-trinary-minmax.insts.inc + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp +source/extensions.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/extensions.h +cassert +- +sstream +- +string +- +source/enum_string_mapping.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/enum_string_mapping.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp +source/id_descriptor.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/id_descriptor.h +cassert +- +iostream +- +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/operand.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp +spirv-tools/libspirv.hpp +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.hpp +iostream +- +string +- +utility +- +vector +- +source/table.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/table.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp +source/name_mapper.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/name_mapper.h +algorithm +- +cassert +- +iterator +- +sstream +- +string +- +unordered_map +- +unordered_set +- +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.h +source/latest_version_spirv_header.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/latest_version_spirv_header.h +source/parsed_operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/parsed_operand.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +assert.h +- +string.h +- +algorithm +- +cstdlib +- +source/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/instruction.h +source/macro.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/macro.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_constant.h +source/spirv_endian.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_endian.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_target_env.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.h +core.insts-unified1.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/core.insts-unified1.inc +generators.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/generators.inc + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/operand.h +assert.h +- +string.h +- +algorithm +- +source/macro.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/macro.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_constant.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_target_env.h +operand.kinds-unified1.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.kinds-unified1.inc + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp +source/parsed_operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/parsed_operand.h +cassert +- +source/util/hex_float.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/hex_float.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp +source/print.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/print.h +windows.h +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.h +build-version.inc +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/build-version.inc + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp +source/spirv_endian.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_endian.h +cstring +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp +cassert +- +cstring +- +source/spirv_optimizer_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_optimizer_options.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_target_env.h +cassert +- +cstring +- +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_constant.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp +cassert +- +cstring +- +source/spirv_validator_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_validator_options.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp +source/table.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/table.h +utility +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp +source/text.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/text.h +algorithm +- +cassert +- +cctype +- +cstdio +- +cstdlib +- +cstring +- +memory +- +set +- +sstream +- +string +- +unordered_map +- +utility +- +vector +- +source/assembly_grammar.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/assembly_grammar.h +source/binary.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/binary.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/diagnostic.h +source/ext_inst.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/ext_inst.h +source/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/instruction.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/operand.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_constant.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/spirv_target_env.h +source/table.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/table.h +source/text_handler.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/text_handler.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/bitutils.h +source/util/parse_number.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/parse_number.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv-tools/libspirv.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp +source/text_handler.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/text_handler.h +algorithm +- +cassert +- +cstdlib +- +cstring +- +tuple +- +source/assembly_grammar.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/assembly_grammar.h +source/binary.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/binary.h +source/ext_inst.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/ext_inst.h +source/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/instruction.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/opcode.h +source/text.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/text.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/bitutils.h +source/util/hex_float.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/hex_float.h +source/util/parse_number.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/source/util/parse_number.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp +source/util/bit_vector.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/source/util/bit_vector.h +cassert +- +iostream +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp +source/util/parse_number.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/source/util/parse_number.h +functional +- +iomanip +- +memory +- +sstream +- +string +- +tuple +- +source/util/hex_float.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/source/util/hex_float.h +source/util/make_unique.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/source/util/make_unique.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp +algorithm +- +cstdint +- +type_traits +- +source/util/string_utils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/source/util/string_utils.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp +source/util/timer.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/source/util/timer.h +sys/resource.h +- +sys/time.h +- +iomanip +- +iostream +- +string +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp +source/val/basic_block.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/basic_block.h +algorithm +- +utility +- +vector +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp +source/val/construct.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/construct.h +cassert +- +cstddef +- +unordered_set +- +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +cassert +- +algorithm +- +sstream +- +unordered_map +- +unordered_set +- +utility +- +source/cfa.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/cfa.h +source/val/basic_block.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/basic_block.h +source/val/construct.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/construct.h +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +utility +- + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +cassert +- +cstdio +- +algorithm +- +functional +- +iterator +- +memory +- +sstream +- +string +- +vector +- +source/binary.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/binary.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/enum_string_mapping.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/enum_string_mapping.h +source/extensions.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/extensions.h +source/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/instruction.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/operand.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_constant.h +source/spirv_endian.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_endian.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/spirv_validator_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_validator_options.h +source/val/construct.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/construct.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/spirv-tools/libspirv.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +string +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +vector +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/util/bitutils.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +string +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_constant.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/util/bitutils.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +functional +- +list +- +map +- +set +- +sstream +- +stack +- +string +- +unordered_map +- +vector +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/util/bitutils.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +cassert +- +string +- +unordered_set +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +cassert +- +functional +- +iostream +- +iterator +- +map +- +string +- +tuple +- +unordered_map +- +unordered_set +- +utility +- +vector +- +source/cfa.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/cfa.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_validator_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_validator_options.h +source/val/basic_block.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/basic_block.h +source/val/construct.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/construct.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +cassert +- +sstream +- +string +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/operand.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +cassert +- +string +- +unordered_map +- +utility +- +vector +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/spirv_validator_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_validator_options.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +string +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +sstream +- +string +- +vector +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/latest_version_glsl_std_450_header.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/latest_version_glsl_std_450_header.h +source/latest_version_opencl_std_header.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/latest_version_opencl_std_header.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +cassert +- +algorithm +- +iostream +- +iterator +- +stack +- +string +- +unordered_set +- +utility +- +vector +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/instruction.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/operand.h +source/spirv_validator_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_validator_options.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/spirv-tools/libspirv.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +string +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/util/bitutils.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +cassert +- +sstream +- +string +- +vector +- +source/binary.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/binary.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/enum_set.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/enum_set.h +source/enum_string_mapping.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/enum_string_mapping.h +source/extensions.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/extensions.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/operand.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_constant.h +source/spirv_definition.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_definition.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/spirv_validator_options.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_validator_options.h +source/util/string_utils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/util/string_utils.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +vector +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +cassert +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/operand.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/operand.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +cassert +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +string +- +vector +- +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +algorithm +- +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_constant.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_constant.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/util/bitutils.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/util/bitutils.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +string +- +source/diagnostic.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/diagnostic.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp +source/val/validate.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validate.h +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/val/instruction.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/instruction.h +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h + +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp +source/val/validation_state.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/validation_state.h +cassert +- +stack +- +utility +- +source/opcode.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/opcode.h +source/spirv_target_env.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/spirv_target_env.h +source/val/basic_block.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/basic_block.h +source/val/construct.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/construct.h +source/val/function.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/source/val/function.h +spirv-tools/libspirv.h +/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/spirv-tools/libspirv.h + +DebugInfo.h + +build-version.inc + +core.insts-unified1.inc + +debuginfo.insts.inc + +enum_string_mapping.inc + +extension_enum.inc + +generators.inc + +glsl.std.450.insts.inc + +opencl.std.insts.inc + +operand.kinds-unified1.inc + +spv-amd-gcn-shader.insts.inc + +spv-amd-shader-ballot.insts.inc + +spv-amd-shader-explicit-vertex-parameter.insts.inc + +spv-amd-shader-trinary-minmax.insts.inc + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake new file mode 100644 index 000000000..5899a7173 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake @@ -0,0 +1,101 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "../include" + "." + "../external/SPIRV-Headers/include" + ) + +# Pairs of files generated by the same build rule. +set(CMAKE_MULTIPLE_OUTPUT_PAIRS + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/enum_string_mapping.inc" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/extension_enum.inc" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/operand.kinds-unified1.inc" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/core.insts-unified1.inc" + ) + + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o new file mode 100644 index 000000000..e87f575f9 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o new file mode 100644 index 000000000..4206a89cc Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/build.make new file mode 100644 index 000000000..b05778622 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/build.make @@ -0,0 +1,1884 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include source/CMakeFiles/SPIRV-Tools.dir/depend.make + +# Include the progress variables for this target. +include source/CMakeFiles/SPIRV-Tools.dir/progress.make + +# Include the compile flags for this target's objects. +include source/CMakeFiles/SPIRV-Tools.dir/flags.make + +extension_enum.inc: ../utils/generate_grammar_tables.py +extension_enum.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +extension_enum.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate enum-string mapping for SPIR-V vunified1." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --spirv-core-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json --extinst-debuginfo-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --extension-enum-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/extension_enum.inc --enum-string-mapping-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/enum_string_mapping.inc + +enum_string_mapping.inc: extension_enum.inc + @$(CMAKE_COMMAND) -E touch_nocreate enum_string_mapping.inc + +opencl.std.insts.inc: ../utils/generate_grammar_tables.py +opencl.std.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +opencl.std.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Generate info tables for OpenCL extended instructions and operands vunified1." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-opencl-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json --opencl-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/opencl.std.insts.inc + +glsl.std.450.insts.inc: ../utils/generate_grammar_tables.py +glsl.std.450.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +glsl.std.450.insts.inc: ../external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Generate info tables for GLSL extended instructions and operands vunified1." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-glsl-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json --glsl-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/glsl.std.450.insts.inc + +spv-amd-shader-explicit-vertex-parameter.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-explicit-vertex-parameter.insts.inc: ../source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Generate extended instruction tables for spv-amd-shader-explicit-vertex-parameter." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-explicit-vertex-parameter.insts.inc + +spv-amd-shader-trinary-minmax.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-trinary-minmax.insts.inc: ../source/extinst.spv-amd-shader-trinary-minmax.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Generate extended instruction tables for spv-amd-shader-trinary-minmax." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-trinary-minmax.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-trinary-minmax.insts.inc + +spv-amd-gcn-shader.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-gcn-shader.insts.inc: ../source/extinst.spv-amd-gcn-shader.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Generate extended instruction tables for spv-amd-gcn-shader." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-gcn-shader.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-gcn-shader.insts.inc + +spv-amd-shader-ballot.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-ballot.insts.inc: ../source/extinst.spv-amd-shader-ballot.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Generate extended instruction tables for spv-amd-shader-ballot." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-ballot.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-ballot.insts.inc + +debuginfo.insts.inc: ../utils/generate_grammar_tables.py +debuginfo.insts.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Generate extended instruction tables for debuginfo." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/debuginfo.insts.inc + +DebugInfo.h: ../utils/generate_language_headers.py +DebugInfo.h: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Generate language specific header for DebugInfo." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_language_headers.py --extinst-name=DebugInfo --extinst-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --extinst-output-base=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/DebugInfo + +core.insts-unified1.inc: ../utils/generate_grammar_tables.py +core.insts-unified1.inc: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +core.insts-unified1.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Generate info tables for SPIR-V vunified1 core instructions and operands." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --spirv-core-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json --extinst-debuginfo-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --core-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/core.insts-unified1.inc --operand-kinds-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/operand.kinds-unified1.inc + +operand.kinds-unified1.inc: core.insts-unified1.inc + @$(CMAKE_COMMAND) -E touch_nocreate operand.kinds-unified1.inc + +generators.inc: ../utils/generate_registry_tables.py +generators.inc: ../external/SPIRV-Headers/include/spirv/spir-v.xml + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Generate tables based on the SPIR-V XML registry." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_registry_tables.py --xml=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/spir-v.xml --generator-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/generators.inc + +build-version.inc: ../utils/update_build_version.py +build-version.inc: ../CHANGES + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Update build-version.inc in the SPIRV-Tools build directory (if necessary)." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/update_build_version.py /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/build-version.inc + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o: ../source/util/bit_vector.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp > CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp -o CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../source/util/parse_number.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp > CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp -o CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o: ../source/util/string_utils.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp > CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp -o CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/assembly_grammar.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp > CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp -o CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/binary.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/binary.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/binary.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp > CMakeFiles/SPIRV-Tools.dir/binary.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/binary.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp -o CMakeFiles/SPIRV-Tools.dir/binary.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/diagnostic.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp > CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp -o CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/disassemble.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp > CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp -o CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/enum_string_mapping.cpp +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: enum_string_mapping.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp > CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp -o CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/ext_inst.cpp +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: opencl.std.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: glsl.std.450.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-shader-explicit-vertex-parameter.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-shader-trinary-minmax.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-gcn-shader.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-shader-ballot.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: debuginfo.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: DebugInfo.h + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp > CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp -o CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/extensions.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/extensions.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp > CMakeFiles/SPIRV-Tools.dir/extensions.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/extensions.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp -o CMakeFiles/SPIRV-Tools.dir/extensions.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/id_descriptor.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp > CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp -o CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/libspirv.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp > CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp -o CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/name_mapper.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp > CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp -o CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/opcode.cpp +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: core.insts-unified1.inc +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: generators.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/opcode.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp > CMakeFiles/SPIRV-Tools.dir/opcode.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/opcode.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp -o CMakeFiles/SPIRV-Tools.dir/opcode.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/operand.cpp +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: operand.kinds-unified1.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/operand.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/operand.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp > CMakeFiles/SPIRV-Tools.dir/operand.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/operand.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp -o CMakeFiles/SPIRV-Tools.dir/operand.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: ../source/parsed_operand.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp > CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp -o CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o: ../source/print.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/print.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/print.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp > CMakeFiles/SPIRV-Tools.dir/print.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/print.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp -o CMakeFiles/SPIRV-Tools.dir/print.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o: ../source/software_version.cpp +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o: build-version.inc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/software_version.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp > CMakeFiles/SPIRV-Tools.dir/software_version.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/software_version.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp -o CMakeFiles/SPIRV-Tools.dir/software_version.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o: ../source/spirv_endian.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_31) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp > CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp -o CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o: ../source/spirv_optimizer_options.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_32) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp > CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp -o CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../source/spirv_target_env.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_33) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp > CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp -o CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o: ../source/spirv_validator_options.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_34) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp > CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp -o CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/table.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_35) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/table.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/table.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp > CMakeFiles/SPIRV-Tools.dir/table.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/table.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp -o CMakeFiles/SPIRV-Tools.dir/table.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/text.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_36) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/text.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/text.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp > CMakeFiles/SPIRV-Tools.dir/text.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/text.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp -o CMakeFiles/SPIRV-Tools.dir/text.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/text_handler.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_37) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp > CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp -o CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/validate.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_38) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/validate_adjacency.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_39) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/validate_annotation.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_40) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/validate_arithmetics.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_41) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/validate_atomics.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_42) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/validate_barriers.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_43) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/validate_bitwise.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_44) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/validate_builtins.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_45) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/validate_capability.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_46) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/validate_cfg.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_47) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/validate_composites.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_48) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/validate_constants.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_49) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/validate_conversion.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_50) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/validate_datarules.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_51) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/validate_debug.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_52) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/validate_decorations.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_53) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/validate_derivatives.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_54) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/validate_ext_inst.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_55) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/validate_execution_limitations.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_56) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/validate_function.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_57) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/validate_id.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_58) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/validate_image.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_59) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/validate_interfaces.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_60) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/validate_instruction.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_61) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/validate_layout.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_62) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/validate_literals.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_63) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/validate_logicals.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_64) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/validate_memory.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_65) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/validate_mode_setting.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_66) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/validate_non_uniform.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_67) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/validate_primitives.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_68) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/validate_type.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_69) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp > CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o: ../source/val/basic_block.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_70) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp > CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp -o CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../source/val/construct.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_71) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp > CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp -o CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/val/function.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_72) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/function.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp > CMakeFiles/SPIRV-Tools.dir/val/function.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/function.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp -o CMakeFiles/SPIRV-Tools.dir/val/function.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/val/instruction.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_73) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp > CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp -o CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/validation_state.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_74) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp > CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp -o CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o + + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o: source/CMakeFiles/SPIRV-Tools.dir/flags.make +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o: ../source/util/timer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_75) "Building CXX object source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp > CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.i + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp -o CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.s + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.requires: + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.requires + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.provides: source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.requires + $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.provides.build +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.provides + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.provides.build: source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o + + +# Object files for target SPIRV-Tools +SPIRV__Tools_OBJECTS = \ +"CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/binary.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/operand.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/print.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/table.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/text.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o" \ +"CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o" + +# External object files for target SPIRV-Tools +SPIRV__Tools_EXTERNAL_OBJECTS = + +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/build.make +source/libSPIRV-Tools.a: source/CMakeFiles/SPIRV-Tools.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_76) "Linking CXX static library libSPIRV-Tools.a" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools.dir/cmake_clean_target.cmake + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/SPIRV-Tools.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +source/CMakeFiles/SPIRV-Tools.dir/build: source/libSPIRV-Tools.a + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/build + +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o.requires +source/CMakeFiles/SPIRV-Tools.dir/requires: source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o.requires + +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/requires + +source/CMakeFiles/SPIRV-Tools.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/clean + +source/CMakeFiles/SPIRV-Tools.dir/depend: extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: enum_string_mapping.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: opencl.std.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: glsl.std.450.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: spv-amd-shader-explicit-vertex-parameter.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: spv-amd-shader-trinary-minmax.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: spv-amd-gcn-shader.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: spv-amd-shader-ballot.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: debuginfo.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: DebugInfo.h +source/CMakeFiles/SPIRV-Tools.dir/depend: core.insts-unified1.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: operand.kinds-unified1.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: generators.inc +source/CMakeFiles/SPIRV-Tools.dir/depend: build-version.inc + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/cmake_clean.cmake new file mode 100644 index 000000000..aff4ad456 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/cmake_clean.cmake @@ -0,0 +1,86 @@ +file(REMOVE_RECURSE + "../extension_enum.inc" + "../enum_string_mapping.inc" + "../opencl.std.insts.inc" + "../glsl.std.450.insts.inc" + "../spv-amd-shader-explicit-vertex-parameter.insts.inc" + "../spv-amd-shader-trinary-minmax.insts.inc" + "../spv-amd-gcn-shader.insts.inc" + "../spv-amd-shader-ballot.insts.inc" + "../debuginfo.insts.inc" + "../DebugInfo.h" + "../core.insts-unified1.inc" + "../operand.kinds-unified1.inc" + "../generators.inc" + "../build-version.inc" + "CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/binary.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/operand.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/print.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/table.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/text.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o" + "CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o" + "libSPIRV-Tools.pdb" + "libSPIRV-Tools.a" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/SPIRV-Tools.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/cmake_clean_target.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/cmake_clean_target.cmake new file mode 100644 index 000000000..51908038a --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libSPIRV-Tools.a" +) diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/depend.internal b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/depend.internal new file mode 100644 index 000000000..e398281bf --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/depend.internal @@ -0,0 +1,1239 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o + ..//source/assembly_grammar.h + ..//source/enum_set.h + ..//source/ext_inst.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/assembly_grammar.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o + ..//source/assembly_grammar.h + ..//source/binary.h + ..//source/diagnostic.h + ..//source/enum_set.h + ..//source/ext_inst.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_endian.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/binary.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o + ..//source/diagnostic.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/diagnostic.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o + ..//source/assembly_grammar.h + ..//source/binary.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/ext_inst.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/name_mapper.h + ..//source/opcode.h + ..//source/operand.h + ..//source/parsed_operand.h + ..//source/print.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_endian.h + ..//source/table.h + ..//source/util/bitutils.h + ..//source/util/hex_float.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/disassemble.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o + ..//source/enum_set.h + ..//source/enum_string_mapping.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/enum_string_mapping.cpp + enum_string_mapping.inc + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o + ..//source/enum_set.h + ..//source/ext_inst.h + ..//source/extensions.h + ..//source/latest_version_glsl_std_450_header.h + ..//source/latest_version_opencl_std_header.h + ..//source/latest_version_spirv_header.h + ..//source/macro.h + ..//source/spirv_definition.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/GLSL.std.450.h + ../external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/ext_inst.cpp + DebugInfo.h + debuginfo.insts.inc + extension_enum.inc + glsl.std.450.insts.inc + opencl.std.insts.inc + spv-amd-gcn-shader.insts.inc + spv-amd-shader-ballot.insts.inc + spv-amd-shader-explicit-vertex-parameter.insts.inc + spv-amd-shader-trinary-minmax.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o + ..//source/enum_set.h + ..//source/enum_string_mapping.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extensions.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o + ..//source/enum_set.h + ..//source/extensions.h + ..//source/id_descriptor.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/id_descriptor.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o + ..//source/enum_set.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/libspirv.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o + ..//source/assembly_grammar.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/name_mapper.h + ..//source/operand.h + ..//source/parsed_operand.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/name_mapper.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/macro.h + ..//source/opcode.h + ..//source/spirv_constant.h + ..//source/spirv_endian.h + ..//source/spirv_target_env.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opcode.cpp + core.insts-unified1.inc + extension_enum.inc + generators.inc +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o + ..//source/enum_set.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/macro.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_target_env.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/operand.cpp + extension_enum.inc + operand.kinds-unified1.inc +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o + ..//source/parsed_operand.h + ..//source/util/bitutils.h + ..//source/util/hex_float.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/parsed_operand.cpp +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o + ..//source/print.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/print.cpp +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/software_version.cpp + build-version.inc +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o + ..//source/spirv_endian.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_endian.cpp +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o + ..//source/spirv_optimizer_options.h + ..//source/spirv_validator_options.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_optimizer_options.cpp +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o + ..//source/latest_version_spirv_header.h + ..//source/spirv_constant.h + ..//source/spirv_target_env.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_target_env.cpp +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o + ..//source/spirv_validator_options.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/spirv_validator_options.cpp +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o + ..//source/enum_set.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/table.h + ..//source/util/make_unique.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/table.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o + ..//source/assembly_grammar.h + ..//source/binary.h + ..//source/diagnostic.h + ..//source/enum_set.h + ..//source/ext_inst.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/table.h + ..//source/text.h + ..//source/text_handler.h + ..//source/util/bitutils.h + ..//source/util/hex_float.h + ..//source/util/make_unique.h + ..//source/util/parse_number.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o + ..//source/assembly_grammar.h + ..//source/binary.h + ..//source/diagnostic.h + ..//source/enum_set.h + ..//source/ext_inst.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/table.h + ..//source/text.h + ..//source/text_handler.h + ..//source/util/bitutils.h + ..//source/util/hex_float.h + ..//source/util/make_unique.h + ..//source/util/parse_number.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/text_handler.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o + ..//source/util/bit_vector.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/bit_vector.cpp +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o + ..//source/util/bitutils.h + ..//source/util/hex_float.h + ..//source/util/make_unique.h + ..//source/util/parse_number.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/parse_number.cpp +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o + ..//source/util/string_utils.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/string_utils.cpp +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o + ..//source/util/timer.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/util/timer.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o + ..//source/latest_version_spirv_header.h + ..//source/val/basic_block.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/basic_block.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o + ..//source/latest_version_spirv_header.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/function.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/construct.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o + ..//source/cfa.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/function.h + ..//source/val/validate.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/function.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o + ..//source/enum_set.h + ..//source/extensions.h + ..//source/latest_version_spirv_header.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/instruction.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/instruction.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o + ..//source/assembly_grammar.h + ..//source/binary.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/enum_string_mapping.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_endian.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_adjacency.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_annotation.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_arithmetics.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/bitutils.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_atomics.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/bitutils.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_barriers.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_bitwise.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/bitutils.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_builtins.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_capability.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o + ..//source/assembly_grammar.h + ..//source/cfa.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_cfg.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_composites.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_constants.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_conversion.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_datarules.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_debug.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_decorations.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_derivatives.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_execution_limitations.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_glsl_std_450_header.h + ..//source/latest_version_opencl_std_header.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/GLSL.std.450.h + ../external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_ext_inst.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_function.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_id.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/bitutils.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_image.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o + ..//source/assembly_grammar.h + ..//source/binary.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/enum_string_mapping.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/util/string_utils.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_instruction.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_interfaces.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_layout.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_literals.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_logicals.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_memory.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_mode_setting.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_constant.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/bitutils.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_non_uniform.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_primitives.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validate.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validate_type.cpp + extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o + ..//source/assembly_grammar.h + ..//source/diagnostic.h + ..//source/disassemble.h + ..//source/enum_set.h + ..//source/extensions.h + ..//source/instruction.h + ..//source/latest_version_spirv_header.h + ..//source/opcode.h + ..//source/operand.h + ..//source/spirv_definition.h + ..//source/spirv_target_env.h + ..//source/spirv_validator_options.h + ..//source/table.h + ..//source/util/make_unique.h + ..//source/val/basic_block.h + ..//source/val/construct.h + ..//source/val/decoration.h + ..//source/val/function.h + ..//source/val/instruction.h + ..//source/val/validation_state.h + ../external/SPIRV-Headers/include/spirv/unified1/spirv.h + ../include/spirv-tools/libspirv.h + ../include/spirv-tools/libspirv.hpp + /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/val/validation_state.cpp + extension_enum.inc diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/depend.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/depend.make new file mode 100644 index 000000000..719ea4265 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/depend.make @@ -0,0 +1,1239 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/ext_inst.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: ../source/assembly_grammar.cpp +source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/binary.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/ext_inst.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/spirv_endian.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: ../source/binary.cpp +source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: ../source/diagnostic.cpp +source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/binary.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/ext_inst.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/name_mapper.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/parsed_operand.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/print.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/spirv_endian.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/util/hex_float.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: ../source/disassemble.cpp +source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/enum_string_mapping.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: ../source/enum_string_mapping.cpp +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: enum_string_mapping.inc +source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/ext_inst.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/latest_version_glsl_std_450_header.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/latest_version_opencl_std_header.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/macro.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/GLSL.std.450.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: ../source/ext_inst.cpp +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: DebugInfo.h +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: debuginfo.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: glsl.std.450.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: opencl.std.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-gcn-shader.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-shader-ballot.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-shader-explicit-vertex-parameter.insts.inc +source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o: spv-amd-shader-trinary-minmax.insts.inc + +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/enum_string_mapping.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: ../source/extensions.cpp +source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/id_descriptor.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: ../source/id_descriptor.cpp +source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: ../source/libspirv.cpp +source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/name_mapper.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/parsed_operand.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: ../source/name_mapper.cpp +source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/macro.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/spirv_endian.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: ../source/opcode.cpp +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: core.insts-unified1.inc +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o: generators.inc + +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/macro.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: ../source/operand.cpp +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: extension_enum.inc +source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o: operand.kinds-unified1.inc + +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: ../source/parsed_operand.h +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: ../source/util/hex_float.h +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o: ../source/parsed_operand.cpp + +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o: ../source/print.h +source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o: ../source/print.cpp + +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o: ../source/software_version.cpp +source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o: build-version.inc + +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o: ../source/spirv_endian.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o: ../source/spirv_endian.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o: ../source/spirv_optimizer_options.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o: ../source/spirv_optimizer_options.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o: ../source/spirv_target_env.cpp + +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o: ../source/spirv_validator_options.cpp + +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: ../source/table.cpp +source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/binary.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/ext_inst.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/text.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/text_handler.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/util/hex_float.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/util/parse_number.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: ../source/text.cpp +source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/binary.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/ext_inst.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/text.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/text_handler.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/util/hex_float.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/util/parse_number.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: ../source/text_handler.cpp +source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o: ../source/util/bit_vector.h +source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o: ../source/util/bit_vector.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../source/util/hex_float.h +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../source/util/parse_number.h +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o: ../source/util/parse_number.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o: ../source/util/string_utils.h +source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o: ../source/util/string_utils.cpp + +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o: ../source/util/timer.h +source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o: ../source/util/timer.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o: ../source/val/basic_block.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o: ../source/val/construct.cpp + +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/cfa.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: ../source/val/function.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: ../source/val/instruction.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/binary.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/enum_string_mapping.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/spirv_endian.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: ../source/val/validate.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: ../source/val/validate_adjacency.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: ../source/val/validate_annotation.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: ../source/val/validate_arithmetics.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: ../source/val/validate_atomics.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: ../source/val/validate_barriers.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: ../source/val/validate_bitwise.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: ../source/val/validate_builtins.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: ../source/val/validate_capability.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/cfa.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: ../source/val/validate_cfg.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: ../source/val/validate_composites.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: ../source/val/validate_constants.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: ../source/val/validate_conversion.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: ../source/val/validate_datarules.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: ../source/val/validate_debug.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: ../source/val/validate_decorations.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: ../source/val/validate_derivatives.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: ../source/val/validate_execution_limitations.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/latest_version_glsl_std_450_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/latest_version_opencl_std_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/GLSL.std.450.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: ../source/val/validate_ext_inst.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: ../source/val/validate_function.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: ../source/val/validate_id.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: ../source/val/validate_image.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/binary.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/enum_string_mapping.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/util/string_utils.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: ../source/val/validate_instruction.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: ../source/val/validate_interfaces.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: ../source/val/validate_layout.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: ../source/val/validate_literals.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: ../source/val/validate_logicals.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: ../source/val/validate_memory.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: ../source/val/validate_mode_setting.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/spirv_constant.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/util/bitutils.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: ../source/val/validate_non_uniform.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: ../source/val/validate_primitives.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/validate.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: ../source/val/validate_type.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o: extension_enum.inc + +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/assembly_grammar.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/diagnostic.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/disassemble.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/enum_set.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/extensions.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/latest_version_spirv_header.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/opcode.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/operand.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/spirv_definition.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/spirv_target_env.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/spirv_validator_options.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/table.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/util/make_unique.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/basic_block.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/construct.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/decoration.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/function.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/instruction.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/validation_state.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../external/SPIRV-Headers/include/spirv/unified1/spirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../include/spirv-tools/libspirv.h +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../include/spirv-tools/libspirv.hpp +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: ../source/val/validation_state.cpp +source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o: extension_enum.inc + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o new file mode 100644 index 000000000..1640b97f8 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o new file mode 100644 index 000000000..7252fae7c Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o new file mode 100644 index 000000000..9dcbe52fa Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o new file mode 100644 index 000000000..645c4fbea Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o new file mode 100644 index 000000000..aed8d2639 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/flags.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/flags.make new file mode 100644 index 000000000..ee9a3be31 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIC -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o new file mode 100644 index 000000000..dc81cceb8 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o new file mode 100644 index 000000000..8cf977e41 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/link.txt b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/link.txt new file mode 100644 index 000000000..d4c824b67 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libSPIRV-Tools.a CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o CMakeFiles/SPIRV-Tools.dir/binary.cpp.o CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o CMakeFiles/SPIRV-Tools.dir/operand.cpp.o CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o CMakeFiles/SPIRV-Tools.dir/print.cpp.o CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o CMakeFiles/SPIRV-Tools.dir/table.cpp.o CMakeFiles/SPIRV-Tools.dir/text.cpp.o CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o +/usr/bin/ranlib libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o new file mode 100644 index 000000000..c994f8bbb Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/progress.make new file mode 100644 index 000000000..d13704d81 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/progress.make @@ -0,0 +1,77 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 1 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = 2 +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = +CMAKE_PROGRESS_9 = 3 +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = 4 +CMAKE_PROGRESS_12 = +CMAKE_PROGRESS_13 = +CMAKE_PROGRESS_14 = 5 +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = +CMAKE_PROGRESS_17 = 6 +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = 7 +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = +CMAKE_PROGRESS_22 = 8 +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = 9 +CMAKE_PROGRESS_26 = +CMAKE_PROGRESS_27 = 10 +CMAKE_PROGRESS_28 = +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = 11 +CMAKE_PROGRESS_31 = +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = 12 +CMAKE_PROGRESS_34 = +CMAKE_PROGRESS_35 = 13 +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = +CMAKE_PROGRESS_38 = 14 +CMAKE_PROGRESS_39 = +CMAKE_PROGRESS_40 = +CMAKE_PROGRESS_41 = 15 +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = 16 +CMAKE_PROGRESS_44 = +CMAKE_PROGRESS_45 = +CMAKE_PROGRESS_46 = 17 +CMAKE_PROGRESS_47 = +CMAKE_PROGRESS_48 = +CMAKE_PROGRESS_49 = 18 +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = 19 +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = +CMAKE_PROGRESS_54 = 20 +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = +CMAKE_PROGRESS_57 = 21 +CMAKE_PROGRESS_58 = +CMAKE_PROGRESS_59 = 22 +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = 23 +CMAKE_PROGRESS_63 = +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = 24 +CMAKE_PROGRESS_66 = +CMAKE_PROGRESS_67 = 25 +CMAKE_PROGRESS_68 = +CMAKE_PROGRESS_69 = +CMAKE_PROGRESS_70 = 26 +CMAKE_PROGRESS_71 = +CMAKE_PROGRESS_72 = +CMAKE_PROGRESS_73 = 27 +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = 28 +CMAKE_PROGRESS_76 = + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o new file mode 100644 index 000000000..f27dca610 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o new file mode 100644 index 000000000..ee1fe81fb Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o new file mode 100644 index 000000000..fb3bc7075 Binary files /dev/null and b/3rdparty/spirv-tools/build/source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o differ diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/source/CMakeFiles/progress.marks new file mode 100644 index 000000000..8643cf6de --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/progress.marks @@ -0,0 +1 @@ +89 diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/build.make new file mode 100644 index 000000000..e5aa94040 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-build-version. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-build-version.dir/progress.make + +source/CMakeFiles/spirv-tools-build-version: build-version.inc + + +build-version.inc: ../utils/update_build_version.py +build-version.inc: ../CHANGES + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Update build-version.inc in the SPIRV-Tools build directory (if necessary)." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/update_build_version.py /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/build-version.inc + +spirv-tools-build-version: source/CMakeFiles/spirv-tools-build-version +spirv-tools-build-version: build-version.inc +spirv-tools-build-version: source/CMakeFiles/spirv-tools-build-version.dir/build.make + +.PHONY : spirv-tools-build-version + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-build-version.dir/build: spirv-tools-build-version + +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/build + +source/CMakeFiles/spirv-tools-build-version.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-build-version.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/clean + +source/CMakeFiles/spirv-tools-build-version.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-build-version.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/cmake_clean.cmake new file mode 100644 index 000000000..feb846fe0 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-build-version" + "../build-version.inc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-build-version.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/progress.make new file mode 100644 index 000000000..225de343d --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-build-version.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/build.make new file mode 100644 index 000000000..cd2b7b3c3 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-debuginfo. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-debuginfo.dir/progress.make + +source/CMakeFiles/spirv-tools-debuginfo: debuginfo.insts.inc + + +debuginfo.insts.inc: ../utils/generate_grammar_tables.py +debuginfo.insts.inc: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate extended instruction tables for debuginfo." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/debuginfo.insts.inc + +spirv-tools-debuginfo: source/CMakeFiles/spirv-tools-debuginfo +spirv-tools-debuginfo: debuginfo.insts.inc +spirv-tools-debuginfo: source/CMakeFiles/spirv-tools-debuginfo.dir/build.make + +.PHONY : spirv-tools-debuginfo + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-debuginfo.dir/build: spirv-tools-debuginfo + +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/build + +source/CMakeFiles/spirv-tools-debuginfo.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-debuginfo.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/clean + +source/CMakeFiles/spirv-tools-debuginfo.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/cmake_clean.cmake new file mode 100644 index 000000000..cc07f7737 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-debuginfo" + "../debuginfo.insts.inc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-debuginfo.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/progress.make new file mode 100644 index 000000000..225de343d --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-debuginfo.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make new file mode 100644 index 000000000..e4a4ecea6 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-header-DebugInfo. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-header-DebugInfo.dir/progress.make + +source/CMakeFiles/spirv-tools-header-DebugInfo: DebugInfo.h + + +DebugInfo.h: ../utils/generate_language_headers.py +DebugInfo.h: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate language specific header for DebugInfo." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_language_headers.py --extinst-name=DebugInfo --extinst-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --extinst-output-base=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/DebugInfo + +spirv-tools-header-DebugInfo: source/CMakeFiles/spirv-tools-header-DebugInfo +spirv-tools-header-DebugInfo: DebugInfo.h +spirv-tools-header-DebugInfo: source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make + +.PHONY : spirv-tools-header-DebugInfo + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build: spirv-tools-header-DebugInfo + +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build + +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-header-DebugInfo.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/clean + +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/cmake_clean.cmake new file mode 100644 index 000000000..adebc2079 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-header-DebugInfo" + "../DebugInfo.h" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-header-DebugInfo.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/progress.make new file mode 100644 index 000000000..ac6b5844b --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-header-DebugInfo.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 97 + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make new file mode 100644 index 000000000..94b110db4 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-spv-amd-gcn-shader. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/progress.make + +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader: spv-amd-gcn-shader.insts.inc + + +spv-amd-gcn-shader.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-gcn-shader.insts.inc: ../source/extinst.spv-amd-gcn-shader.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate extended instruction tables for spv-amd-gcn-shader." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-gcn-shader.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-gcn-shader.insts.inc + +spirv-tools-spv-amd-gcn-shader: source/CMakeFiles/spirv-tools-spv-amd-gcn-shader +spirv-tools-spv-amd-gcn-shader: spv-amd-gcn-shader.insts.inc +spirv-tools-spv-amd-gcn-shader: source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make + +.PHONY : spirv-tools-spv-amd-gcn-shader + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build: spirv-tools-spv-amd-gcn-shader + +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build + +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/clean + +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/cmake_clean.cmake new file mode 100644 index 000000000..3cd25a9ca --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-spv-amd-gcn-shader" + "../spv-amd-gcn-shader.insts.inc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/progress.make new file mode 100644 index 000000000..225de343d --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make new file mode 100644 index 000000000..85d2373eb --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-spv-amd-shader-ballot. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/progress.make + +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot: spv-amd-shader-ballot.insts.inc + + +spv-amd-shader-ballot.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-ballot.insts.inc: ../source/extinst.spv-amd-shader-ballot.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate extended instruction tables for spv-amd-shader-ballot." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-ballot.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-ballot.insts.inc + +spirv-tools-spv-amd-shader-ballot: source/CMakeFiles/spirv-tools-spv-amd-shader-ballot +spirv-tools-spv-amd-shader-ballot: spv-amd-shader-ballot.insts.inc +spirv-tools-spv-amd-shader-ballot: source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make + +.PHONY : spirv-tools-spv-amd-shader-ballot + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build: spirv-tools-spv-amd-shader-ballot + +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build + +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/clean + +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/cmake_clean.cmake new file mode 100644 index 000000000..688a45782 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-spv-amd-shader-ballot" + "../spv-amd-shader-ballot.insts.inc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/progress.make new file mode 100644 index 000000000..225de343d --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make new file mode 100644 index 000000000..145a32f80 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-spv-amd-shader-explicit-vertex-parameter. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/progress.make + +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter: spv-amd-shader-explicit-vertex-parameter.insts.inc + + +spv-amd-shader-explicit-vertex-parameter.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-explicit-vertex-parameter.insts.inc: ../source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate extended instruction tables for spv-amd-shader-explicit-vertex-parameter." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-explicit-vertex-parameter.insts.inc + +spirv-tools-spv-amd-shader-explicit-vertex-parameter: source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter +spirv-tools-spv-amd-shader-explicit-vertex-parameter: spv-amd-shader-explicit-vertex-parameter.insts.inc +spirv-tools-spv-amd-shader-explicit-vertex-parameter: source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make + +.PHONY : spirv-tools-spv-amd-shader-explicit-vertex-parameter + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build: spirv-tools-spv-amd-shader-explicit-vertex-parameter + +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build + +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/clean + +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/cmake_clean.cmake new file mode 100644 index 000000000..7798d5195 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter" + "../spv-amd-shader-explicit-vertex-parameter.insts.inc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/progress.make new file mode 100644 index 000000000..9e973d36e --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 98 + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make new file mode 100644 index 000000000..cb3eeef58 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make @@ -0,0 +1,82 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-spv-amd-shader-trinary-minmax. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/progress.make + +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax: spv-amd-shader-trinary-minmax.insts.inc + + +spv-amd-shader-trinary-minmax.insts.inc: ../utils/generate_grammar_tables.py +spv-amd-shader-trinary-minmax.insts.inc: ../source/extinst.spv-amd-shader-trinary-minmax.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate extended instruction tables for spv-amd-shader-trinary-minmax." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_grammar_tables.py --extinst-vendor-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.spv-amd-shader-trinary-minmax.grammar.json --vendor-insts-output=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spv-amd-shader-trinary-minmax.insts.inc + +spirv-tools-spv-amd-shader-trinary-minmax: source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax +spirv-tools-spv-amd-shader-trinary-minmax: spv-amd-shader-trinary-minmax.insts.inc +spirv-tools-spv-amd-shader-trinary-minmax: source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make + +.PHONY : spirv-tools-spv-amd-shader-trinary-minmax + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build: spirv-tools-spv-amd-shader-trinary-minmax + +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build + +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/clean + +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/cmake_clean.cmake new file mode 100644 index 000000000..3ef5ed41a --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax" + "../spv-amd-shader-trinary-minmax.insts.inc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/progress.make new file mode 100644 index 000000000..225de343d --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/DependInfo.cmake new file mode 100644 index 000000000..19fab2149 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make new file mode 100644 index 000000000..ee9cf9ea7 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make @@ -0,0 +1,85 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Utility rule file for spirv-tools-vimsyntax. + +# Include the progress variables for this target. +include source/CMakeFiles/spirv-tools-vimsyntax.dir/progress.make + +source/CMakeFiles/spirv-tools-vimsyntax: spvasm.vim + + +spvasm.vim: ../utils/generate_vim_syntax.py +spvasm.vim: ../external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +spvasm.vim: ../external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json +spvasm.vim: ../external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json +spvasm.vim: ../source/extinst.debuginfo.grammar.json + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generate spvasm.vim: Vim syntax file for SPIR-V assembly." + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && /usr/bin/python /home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/generate_vim_syntax.py --spirv-core-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json --extinst-debuginfo-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/extinst.debuginfo.grammar.json --extinst-glsl-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json --extinst-opencl-grammar=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json >/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/spvasm.vim + +spirv-tools-vimsyntax: source/CMakeFiles/spirv-tools-vimsyntax +spirv-tools-vimsyntax: spvasm.vim +spirv-tools-vimsyntax: source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make + +.PHONY : spirv-tools-vimsyntax + +# Rule to build all files generated by this target. +source/CMakeFiles/spirv-tools-vimsyntax.dir/build: spirv-tools-vimsyntax + +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/build + +source/CMakeFiles/spirv-tools-vimsyntax.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source && $(CMAKE_COMMAND) -P CMakeFiles/spirv-tools-vimsyntax.dir/cmake_clean.cmake +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/clean + +source/CMakeFiles/spirv-tools-vimsyntax.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/cmake_clean.cmake new file mode 100644 index 000000000..63729c8bc --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/cmake_clean.cmake @@ -0,0 +1,9 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-tools-vimsyntax" + "../spvasm.vim" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/spirv-tools-vimsyntax.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/progress.make b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/progress.make new file mode 100644 index 000000000..225de343d --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CMakeFiles/spirv-tools-vimsyntax.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = + diff --git a/3rdparty/spirv-tools/build/source/CTestTestfile.cmake b/3rdparty/spirv-tools/build/source/CTestTestfile.cmake new file mode 100644 index 000000000..b094b2e0c --- /dev/null +++ b/3rdparty/spirv-tools/build/source/CTestTestfile.cmake @@ -0,0 +1,11 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(spirv-tools-symbol-exports-SPIRV-Tools "/usr/bin/python" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/check_symbol_exports.py" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/libSPIRV-Tools.a") +add_test(spirv-tools-symbol-exports-SPIRV-Tools-shared "/usr/bin/python" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/check_symbol_exports.py" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/libSPIRV-Tools-shared.so") +subdirs(comp) +subdirs(opt) +subdirs(link) diff --git a/3rdparty/spirv-tools/build/source/Makefile b/3rdparty/spirv-tools/build/source/Makefile new file mode 100644 index 000000000..485e6469c --- /dev/null +++ b/3rdparty/spirv-tools/build/source/Makefile @@ -0,0 +1,2433 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +source/CMakeFiles/spirv-tools-debuginfo.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-debuginfo.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-debuginfo.dir/rule + +# Convenience name for target. +spirv-tools-debuginfo: source/CMakeFiles/spirv-tools-debuginfo.dir/rule + +.PHONY : spirv-tools-debuginfo + +# fast build rule for target. +spirv-tools-debuginfo/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-debuginfo.dir/build.make source/CMakeFiles/spirv-tools-debuginfo.dir/build +.PHONY : spirv-tools-debuginfo/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-shader-ballot: source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/rule + +.PHONY : spirv-tools-spv-amd-shader-ballot + +# fast build rule for target. +spirv-tools-spv-amd-shader-ballot/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-ballot.dir/build +.PHONY : spirv-tools-spv-amd-shader-ballot/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-shader-trinary-minmax: source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/rule + +.PHONY : spirv-tools-spv-amd-shader-trinary-minmax + +# fast build rule for target. +spirv-tools-spv-amd-shader-trinary-minmax/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-trinary-minmax.dir/build +.PHONY : spirv-tools-spv-amd-shader-trinary-minmax/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-gcn-shader: source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/rule + +.PHONY : spirv-tools-spv-amd-gcn-shader + +# fast build rule for target. +spirv-tools-spv-amd-gcn-shader/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-gcn-shader.dir/build +.PHONY : spirv-tools-spv-amd-gcn-shader/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule + +# Convenience name for target. +spirv-tools-header-DebugInfo: source/CMakeFiles/spirv-tools-header-DebugInfo.dir/rule + +.PHONY : spirv-tools-header-DebugInfo + +# fast build rule for target. +spirv-tools-header-DebugInfo/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build.make source/CMakeFiles/spirv-tools-header-DebugInfo.dir/build +.PHONY : spirv-tools-header-DebugInfo/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-build-version.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-build-version.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-build-version.dir/rule + +# Convenience name for target. +spirv-tools-build-version: source/CMakeFiles/spirv-tools-build-version.dir/rule + +.PHONY : spirv-tools-build-version + +# fast build rule for target. +spirv-tools-build-version/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-build-version.dir/build.make source/CMakeFiles/spirv-tools-build-version.dir/build +.PHONY : spirv-tools-build-version/fast + +# Convenience name for target. +source/CMakeFiles/SPIRV-Tools.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/SPIRV-Tools.dir/rule +.PHONY : source/CMakeFiles/SPIRV-Tools.dir/rule + +# Convenience name for target. +SPIRV-Tools: source/CMakeFiles/SPIRV-Tools.dir/rule + +.PHONY : SPIRV-Tools + +# fast build rule for target. +SPIRV-Tools/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/build +.PHONY : SPIRV-Tools/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule + +# Convenience name for target. +spirv-tools-spv-amd-shader-explicit-vertex-parameter: source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/rule + +.PHONY : spirv-tools-spv-amd-shader-explicit-vertex-parameter + +# fast build rule for target. +spirv-tools-spv-amd-shader-explicit-vertex-parameter/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build.make source/CMakeFiles/spirv-tools-spv-amd-shader-explicit-vertex-parameter.dir/build +.PHONY : spirv-tools-spv-amd-shader-explicit-vertex-parameter/fast + +# Convenience name for target. +source/CMakeFiles/SPIRV-Tools-shared.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/SPIRV-Tools-shared.dir/rule +.PHONY : source/CMakeFiles/SPIRV-Tools-shared.dir/rule + +# Convenience name for target. +SPIRV-Tools-shared: source/CMakeFiles/SPIRV-Tools-shared.dir/rule + +.PHONY : SPIRV-Tools-shared + +# fast build rule for target. +SPIRV-Tools-shared/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/build +.PHONY : SPIRV-Tools-shared/fast + +# Convenience name for target. +source/CMakeFiles/spirv-tools-vimsyntax.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/CMakeFiles/spirv-tools-vimsyntax.dir/rule +.PHONY : source/CMakeFiles/spirv-tools-vimsyntax.dir/rule + +# Convenience name for target. +spirv-tools-vimsyntax: source/CMakeFiles/spirv-tools-vimsyntax.dir/rule + +.PHONY : spirv-tools-vimsyntax + +# fast build rule for target. +spirv-tools-vimsyntax/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/spirv-tools-vimsyntax.dir/build.make source/CMakeFiles/spirv-tools-vimsyntax.dir/build +.PHONY : spirv-tools-vimsyntax/fast + +assembly_grammar.o: assembly_grammar.cpp.o + +.PHONY : assembly_grammar.o + +# target to build an object file +assembly_grammar.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.o +.PHONY : assembly_grammar.cpp.o + +assembly_grammar.i: assembly_grammar.cpp.i + +.PHONY : assembly_grammar.i + +# target to preprocess a source file +assembly_grammar.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.i +.PHONY : assembly_grammar.cpp.i + +assembly_grammar.s: assembly_grammar.cpp.s + +.PHONY : assembly_grammar.s + +# target to generate assembly for a file +assembly_grammar.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/assembly_grammar.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/assembly_grammar.cpp.s +.PHONY : assembly_grammar.cpp.s + +binary.o: binary.cpp.o + +.PHONY : binary.o + +# target to build an object file +binary.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.o +.PHONY : binary.cpp.o + +binary.i: binary.cpp.i + +.PHONY : binary.i + +# target to preprocess a source file +binary.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.i +.PHONY : binary.cpp.i + +binary.s: binary.cpp.s + +.PHONY : binary.s + +# target to generate assembly for a file +binary.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/binary.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/binary.cpp.s +.PHONY : binary.cpp.s + +diagnostic.o: diagnostic.cpp.o + +.PHONY : diagnostic.o + +# target to build an object file +diagnostic.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.o +.PHONY : diagnostic.cpp.o + +diagnostic.i: diagnostic.cpp.i + +.PHONY : diagnostic.i + +# target to preprocess a source file +diagnostic.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.i +.PHONY : diagnostic.cpp.i + +diagnostic.s: diagnostic.cpp.s + +.PHONY : diagnostic.s + +# target to generate assembly for a file +diagnostic.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/diagnostic.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/diagnostic.cpp.s +.PHONY : diagnostic.cpp.s + +disassemble.o: disassemble.cpp.o + +.PHONY : disassemble.o + +# target to build an object file +disassemble.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.o +.PHONY : disassemble.cpp.o + +disassemble.i: disassemble.cpp.i + +.PHONY : disassemble.i + +# target to preprocess a source file +disassemble.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.i +.PHONY : disassemble.cpp.i + +disassemble.s: disassemble.cpp.s + +.PHONY : disassemble.s + +# target to generate assembly for a file +disassemble.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/disassemble.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/disassemble.cpp.s +.PHONY : disassemble.cpp.s + +enum_string_mapping.o: enum_string_mapping.cpp.o + +.PHONY : enum_string_mapping.o + +# target to build an object file +enum_string_mapping.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.o +.PHONY : enum_string_mapping.cpp.o + +enum_string_mapping.i: enum_string_mapping.cpp.i + +.PHONY : enum_string_mapping.i + +# target to preprocess a source file +enum_string_mapping.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.i +.PHONY : enum_string_mapping.cpp.i + +enum_string_mapping.s: enum_string_mapping.cpp.s + +.PHONY : enum_string_mapping.s + +# target to generate assembly for a file +enum_string_mapping.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/enum_string_mapping.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/enum_string_mapping.cpp.s +.PHONY : enum_string_mapping.cpp.s + +ext_inst.o: ext_inst.cpp.o + +.PHONY : ext_inst.o + +# target to build an object file +ext_inst.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.o +.PHONY : ext_inst.cpp.o + +ext_inst.i: ext_inst.cpp.i + +.PHONY : ext_inst.i + +# target to preprocess a source file +ext_inst.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.i +.PHONY : ext_inst.cpp.i + +ext_inst.s: ext_inst.cpp.s + +.PHONY : ext_inst.s + +# target to generate assembly for a file +ext_inst.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/ext_inst.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/ext_inst.cpp.s +.PHONY : ext_inst.cpp.s + +extensions.o: extensions.cpp.o + +.PHONY : extensions.o + +# target to build an object file +extensions.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.o +.PHONY : extensions.cpp.o + +extensions.i: extensions.cpp.i + +.PHONY : extensions.i + +# target to preprocess a source file +extensions.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.i +.PHONY : extensions.cpp.i + +extensions.s: extensions.cpp.s + +.PHONY : extensions.s + +# target to generate assembly for a file +extensions.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/extensions.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/extensions.cpp.s +.PHONY : extensions.cpp.s + +id_descriptor.o: id_descriptor.cpp.o + +.PHONY : id_descriptor.o + +# target to build an object file +id_descriptor.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.o +.PHONY : id_descriptor.cpp.o + +id_descriptor.i: id_descriptor.cpp.i + +.PHONY : id_descriptor.i + +# target to preprocess a source file +id_descriptor.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.i +.PHONY : id_descriptor.cpp.i + +id_descriptor.s: id_descriptor.cpp.s + +.PHONY : id_descriptor.s + +# target to generate assembly for a file +id_descriptor.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/id_descriptor.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/id_descriptor.cpp.s +.PHONY : id_descriptor.cpp.s + +libspirv.o: libspirv.cpp.o + +.PHONY : libspirv.o + +# target to build an object file +libspirv.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.o +.PHONY : libspirv.cpp.o + +libspirv.i: libspirv.cpp.i + +.PHONY : libspirv.i + +# target to preprocess a source file +libspirv.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.i +.PHONY : libspirv.cpp.i + +libspirv.s: libspirv.cpp.s + +.PHONY : libspirv.s + +# target to generate assembly for a file +libspirv.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/libspirv.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/libspirv.cpp.s +.PHONY : libspirv.cpp.s + +name_mapper.o: name_mapper.cpp.o + +.PHONY : name_mapper.o + +# target to build an object file +name_mapper.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.o +.PHONY : name_mapper.cpp.o + +name_mapper.i: name_mapper.cpp.i + +.PHONY : name_mapper.i + +# target to preprocess a source file +name_mapper.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.i +.PHONY : name_mapper.cpp.i + +name_mapper.s: name_mapper.cpp.s + +.PHONY : name_mapper.s + +# target to generate assembly for a file +name_mapper.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/name_mapper.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/name_mapper.cpp.s +.PHONY : name_mapper.cpp.s + +opcode.o: opcode.cpp.o + +.PHONY : opcode.o + +# target to build an object file +opcode.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.o +.PHONY : opcode.cpp.o + +opcode.i: opcode.cpp.i + +.PHONY : opcode.i + +# target to preprocess a source file +opcode.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.i +.PHONY : opcode.cpp.i + +opcode.s: opcode.cpp.s + +.PHONY : opcode.s + +# target to generate assembly for a file +opcode.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/opcode.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/opcode.cpp.s +.PHONY : opcode.cpp.s + +operand.o: operand.cpp.o + +.PHONY : operand.o + +# target to build an object file +operand.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.o +.PHONY : operand.cpp.o + +operand.i: operand.cpp.i + +.PHONY : operand.i + +# target to preprocess a source file +operand.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.i +.PHONY : operand.cpp.i + +operand.s: operand.cpp.s + +.PHONY : operand.s + +# target to generate assembly for a file +operand.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/operand.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/operand.cpp.s +.PHONY : operand.cpp.s + +parsed_operand.o: parsed_operand.cpp.o + +.PHONY : parsed_operand.o + +# target to build an object file +parsed_operand.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.o +.PHONY : parsed_operand.cpp.o + +parsed_operand.i: parsed_operand.cpp.i + +.PHONY : parsed_operand.i + +# target to preprocess a source file +parsed_operand.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.i +.PHONY : parsed_operand.cpp.i + +parsed_operand.s: parsed_operand.cpp.s + +.PHONY : parsed_operand.s + +# target to generate assembly for a file +parsed_operand.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/parsed_operand.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/parsed_operand.cpp.s +.PHONY : parsed_operand.cpp.s + +print.o: print.cpp.o + +.PHONY : print.o + +# target to build an object file +print.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/print.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.o +.PHONY : print.cpp.o + +print.i: print.cpp.i + +.PHONY : print.i + +# target to preprocess a source file +print.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/print.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.i +.PHONY : print.cpp.i + +print.s: print.cpp.s + +.PHONY : print.s + +# target to generate assembly for a file +print.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/print.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/print.cpp.s +.PHONY : print.cpp.s + +software_version.o: software_version.cpp.o + +.PHONY : software_version.o + +# target to build an object file +software_version.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.o +.PHONY : software_version.cpp.o + +software_version.i: software_version.cpp.i + +.PHONY : software_version.i + +# target to preprocess a source file +software_version.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.i +.PHONY : software_version.cpp.i + +software_version.s: software_version.cpp.s + +.PHONY : software_version.s + +# target to generate assembly for a file +software_version.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/software_version.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/software_version.cpp.s +.PHONY : software_version.cpp.s + +spirv_endian.o: spirv_endian.cpp.o + +.PHONY : spirv_endian.o + +# target to build an object file +spirv_endian.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.o +.PHONY : spirv_endian.cpp.o + +spirv_endian.i: spirv_endian.cpp.i + +.PHONY : spirv_endian.i + +# target to preprocess a source file +spirv_endian.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.i +.PHONY : spirv_endian.cpp.i + +spirv_endian.s: spirv_endian.cpp.s + +.PHONY : spirv_endian.s + +# target to generate assembly for a file +spirv_endian.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_endian.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_endian.cpp.s +.PHONY : spirv_endian.cpp.s + +spirv_optimizer_options.o: spirv_optimizer_options.cpp.o + +.PHONY : spirv_optimizer_options.o + +# target to build an object file +spirv_optimizer_options.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.o +.PHONY : spirv_optimizer_options.cpp.o + +spirv_optimizer_options.i: spirv_optimizer_options.cpp.i + +.PHONY : spirv_optimizer_options.i + +# target to preprocess a source file +spirv_optimizer_options.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.i +.PHONY : spirv_optimizer_options.cpp.i + +spirv_optimizer_options.s: spirv_optimizer_options.cpp.s + +.PHONY : spirv_optimizer_options.s + +# target to generate assembly for a file +spirv_optimizer_options.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_optimizer_options.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_optimizer_options.cpp.s +.PHONY : spirv_optimizer_options.cpp.s + +spirv_target_env.o: spirv_target_env.cpp.o + +.PHONY : spirv_target_env.o + +# target to build an object file +spirv_target_env.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.o +.PHONY : spirv_target_env.cpp.o + +spirv_target_env.i: spirv_target_env.cpp.i + +.PHONY : spirv_target_env.i + +# target to preprocess a source file +spirv_target_env.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.i +.PHONY : spirv_target_env.cpp.i + +spirv_target_env.s: spirv_target_env.cpp.s + +.PHONY : spirv_target_env.s + +# target to generate assembly for a file +spirv_target_env.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_target_env.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_target_env.cpp.s +.PHONY : spirv_target_env.cpp.s + +spirv_validator_options.o: spirv_validator_options.cpp.o + +.PHONY : spirv_validator_options.o + +# target to build an object file +spirv_validator_options.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.o +.PHONY : spirv_validator_options.cpp.o + +spirv_validator_options.i: spirv_validator_options.cpp.i + +.PHONY : spirv_validator_options.i + +# target to preprocess a source file +spirv_validator_options.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.i +.PHONY : spirv_validator_options.cpp.i + +spirv_validator_options.s: spirv_validator_options.cpp.s + +.PHONY : spirv_validator_options.s + +# target to generate assembly for a file +spirv_validator_options.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/spirv_validator_options.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/spirv_validator_options.cpp.s +.PHONY : spirv_validator_options.cpp.s + +table.o: table.cpp.o + +.PHONY : table.o + +# target to build an object file +table.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/table.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.o +.PHONY : table.cpp.o + +table.i: table.cpp.i + +.PHONY : table.i + +# target to preprocess a source file +table.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/table.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.i +.PHONY : table.cpp.i + +table.s: table.cpp.s + +.PHONY : table.s + +# target to generate assembly for a file +table.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/table.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/table.cpp.s +.PHONY : table.cpp.s + +text.o: text.cpp.o + +.PHONY : text.o + +# target to build an object file +text.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.o +.PHONY : text.cpp.o + +text.i: text.cpp.i + +.PHONY : text.i + +# target to preprocess a source file +text.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.i +.PHONY : text.cpp.i + +text.s: text.cpp.s + +.PHONY : text.s + +# target to generate assembly for a file +text.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text.cpp.s +.PHONY : text.cpp.s + +text_handler.o: text_handler.cpp.o + +.PHONY : text_handler.o + +# target to build an object file +text_handler.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.o +.PHONY : text_handler.cpp.o + +text_handler.i: text_handler.cpp.i + +.PHONY : text_handler.i + +# target to preprocess a source file +text_handler.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.i +.PHONY : text_handler.cpp.i + +text_handler.s: text_handler.cpp.s + +.PHONY : text_handler.s + +# target to generate assembly for a file +text_handler.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/text_handler.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/text_handler.cpp.s +.PHONY : text_handler.cpp.s + +util/bit_vector.o: util/bit_vector.cpp.o + +.PHONY : util/bit_vector.o + +# target to build an object file +util/bit_vector.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.o +.PHONY : util/bit_vector.cpp.o + +util/bit_vector.i: util/bit_vector.cpp.i + +.PHONY : util/bit_vector.i + +# target to preprocess a source file +util/bit_vector.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.i +.PHONY : util/bit_vector.cpp.i + +util/bit_vector.s: util/bit_vector.cpp.s + +.PHONY : util/bit_vector.s + +# target to generate assembly for a file +util/bit_vector.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/bit_vector.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/bit_vector.cpp.s +.PHONY : util/bit_vector.cpp.s + +util/parse_number.o: util/parse_number.cpp.o + +.PHONY : util/parse_number.o + +# target to build an object file +util/parse_number.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.o +.PHONY : util/parse_number.cpp.o + +util/parse_number.i: util/parse_number.cpp.i + +.PHONY : util/parse_number.i + +# target to preprocess a source file +util/parse_number.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.i +.PHONY : util/parse_number.cpp.i + +util/parse_number.s: util/parse_number.cpp.s + +.PHONY : util/parse_number.s + +# target to generate assembly for a file +util/parse_number.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/parse_number.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/parse_number.cpp.s +.PHONY : util/parse_number.cpp.s + +util/string_utils.o: util/string_utils.cpp.o + +.PHONY : util/string_utils.o + +# target to build an object file +util/string_utils.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.o +.PHONY : util/string_utils.cpp.o + +util/string_utils.i: util/string_utils.cpp.i + +.PHONY : util/string_utils.i + +# target to preprocess a source file +util/string_utils.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.i +.PHONY : util/string_utils.cpp.i + +util/string_utils.s: util/string_utils.cpp.s + +.PHONY : util/string_utils.s + +# target to generate assembly for a file +util/string_utils.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/string_utils.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/string_utils.cpp.s +.PHONY : util/string_utils.cpp.s + +util/timer.o: util/timer.cpp.o + +.PHONY : util/timer.o + +# target to build an object file +util/timer.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.o +.PHONY : util/timer.cpp.o + +util/timer.i: util/timer.cpp.i + +.PHONY : util/timer.i + +# target to preprocess a source file +util/timer.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.i +.PHONY : util/timer.cpp.i + +util/timer.s: util/timer.cpp.s + +.PHONY : util/timer.s + +# target to generate assembly for a file +util/timer.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/util/timer.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/util/timer.cpp.s +.PHONY : util/timer.cpp.s + +val/basic_block.o: val/basic_block.cpp.o + +.PHONY : val/basic_block.o + +# target to build an object file +val/basic_block.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.o +.PHONY : val/basic_block.cpp.o + +val/basic_block.i: val/basic_block.cpp.i + +.PHONY : val/basic_block.i + +# target to preprocess a source file +val/basic_block.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.i +.PHONY : val/basic_block.cpp.i + +val/basic_block.s: val/basic_block.cpp.s + +.PHONY : val/basic_block.s + +# target to generate assembly for a file +val/basic_block.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/basic_block.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/basic_block.cpp.s +.PHONY : val/basic_block.cpp.s + +val/construct.o: val/construct.cpp.o + +.PHONY : val/construct.o + +# target to build an object file +val/construct.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.o +.PHONY : val/construct.cpp.o + +val/construct.i: val/construct.cpp.i + +.PHONY : val/construct.i + +# target to preprocess a source file +val/construct.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.i +.PHONY : val/construct.cpp.i + +val/construct.s: val/construct.cpp.s + +.PHONY : val/construct.s + +# target to generate assembly for a file +val/construct.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/construct.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/construct.cpp.s +.PHONY : val/construct.cpp.s + +val/function.o: val/function.cpp.o + +.PHONY : val/function.o + +# target to build an object file +val/function.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.o +.PHONY : val/function.cpp.o + +val/function.i: val/function.cpp.i + +.PHONY : val/function.i + +# target to preprocess a source file +val/function.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.i +.PHONY : val/function.cpp.i + +val/function.s: val/function.cpp.s + +.PHONY : val/function.s + +# target to generate assembly for a file +val/function.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/function.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/function.cpp.s +.PHONY : val/function.cpp.s + +val/instruction.o: val/instruction.cpp.o + +.PHONY : val/instruction.o + +# target to build an object file +val/instruction.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.o +.PHONY : val/instruction.cpp.o + +val/instruction.i: val/instruction.cpp.i + +.PHONY : val/instruction.i + +# target to preprocess a source file +val/instruction.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.i +.PHONY : val/instruction.cpp.i + +val/instruction.s: val/instruction.cpp.s + +.PHONY : val/instruction.s + +# target to generate assembly for a file +val/instruction.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/instruction.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/instruction.cpp.s +.PHONY : val/instruction.cpp.s + +val/validate.o: val/validate.cpp.o + +.PHONY : val/validate.o + +# target to build an object file +val/validate.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.o +.PHONY : val/validate.cpp.o + +val/validate.i: val/validate.cpp.i + +.PHONY : val/validate.i + +# target to preprocess a source file +val/validate.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.i +.PHONY : val/validate.cpp.i + +val/validate.s: val/validate.cpp.s + +.PHONY : val/validate.s + +# target to generate assembly for a file +val/validate.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate.cpp.s +.PHONY : val/validate.cpp.s + +val/validate_adjacency.o: val/validate_adjacency.cpp.o + +.PHONY : val/validate_adjacency.o + +# target to build an object file +val/validate_adjacency.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.o +.PHONY : val/validate_adjacency.cpp.o + +val/validate_adjacency.i: val/validate_adjacency.cpp.i + +.PHONY : val/validate_adjacency.i + +# target to preprocess a source file +val/validate_adjacency.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.i +.PHONY : val/validate_adjacency.cpp.i + +val/validate_adjacency.s: val/validate_adjacency.cpp.s + +.PHONY : val/validate_adjacency.s + +# target to generate assembly for a file +val/validate_adjacency.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_adjacency.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_adjacency.cpp.s +.PHONY : val/validate_adjacency.cpp.s + +val/validate_annotation.o: val/validate_annotation.cpp.o + +.PHONY : val/validate_annotation.o + +# target to build an object file +val/validate_annotation.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.o +.PHONY : val/validate_annotation.cpp.o + +val/validate_annotation.i: val/validate_annotation.cpp.i + +.PHONY : val/validate_annotation.i + +# target to preprocess a source file +val/validate_annotation.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.i +.PHONY : val/validate_annotation.cpp.i + +val/validate_annotation.s: val/validate_annotation.cpp.s + +.PHONY : val/validate_annotation.s + +# target to generate assembly for a file +val/validate_annotation.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_annotation.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_annotation.cpp.s +.PHONY : val/validate_annotation.cpp.s + +val/validate_arithmetics.o: val/validate_arithmetics.cpp.o + +.PHONY : val/validate_arithmetics.o + +# target to build an object file +val/validate_arithmetics.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.o +.PHONY : val/validate_arithmetics.cpp.o + +val/validate_arithmetics.i: val/validate_arithmetics.cpp.i + +.PHONY : val/validate_arithmetics.i + +# target to preprocess a source file +val/validate_arithmetics.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.i +.PHONY : val/validate_arithmetics.cpp.i + +val/validate_arithmetics.s: val/validate_arithmetics.cpp.s + +.PHONY : val/validate_arithmetics.s + +# target to generate assembly for a file +val/validate_arithmetics.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_arithmetics.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_arithmetics.cpp.s +.PHONY : val/validate_arithmetics.cpp.s + +val/validate_atomics.o: val/validate_atomics.cpp.o + +.PHONY : val/validate_atomics.o + +# target to build an object file +val/validate_atomics.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.o +.PHONY : val/validate_atomics.cpp.o + +val/validate_atomics.i: val/validate_atomics.cpp.i + +.PHONY : val/validate_atomics.i + +# target to preprocess a source file +val/validate_atomics.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.i +.PHONY : val/validate_atomics.cpp.i + +val/validate_atomics.s: val/validate_atomics.cpp.s + +.PHONY : val/validate_atomics.s + +# target to generate assembly for a file +val/validate_atomics.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_atomics.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_atomics.cpp.s +.PHONY : val/validate_atomics.cpp.s + +val/validate_barriers.o: val/validate_barriers.cpp.o + +.PHONY : val/validate_barriers.o + +# target to build an object file +val/validate_barriers.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.o +.PHONY : val/validate_barriers.cpp.o + +val/validate_barriers.i: val/validate_barriers.cpp.i + +.PHONY : val/validate_barriers.i + +# target to preprocess a source file +val/validate_barriers.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.i +.PHONY : val/validate_barriers.cpp.i + +val/validate_barriers.s: val/validate_barriers.cpp.s + +.PHONY : val/validate_barriers.s + +# target to generate assembly for a file +val/validate_barriers.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_barriers.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_barriers.cpp.s +.PHONY : val/validate_barriers.cpp.s + +val/validate_bitwise.o: val/validate_bitwise.cpp.o + +.PHONY : val/validate_bitwise.o + +# target to build an object file +val/validate_bitwise.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.o +.PHONY : val/validate_bitwise.cpp.o + +val/validate_bitwise.i: val/validate_bitwise.cpp.i + +.PHONY : val/validate_bitwise.i + +# target to preprocess a source file +val/validate_bitwise.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.i +.PHONY : val/validate_bitwise.cpp.i + +val/validate_bitwise.s: val/validate_bitwise.cpp.s + +.PHONY : val/validate_bitwise.s + +# target to generate assembly for a file +val/validate_bitwise.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_bitwise.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_bitwise.cpp.s +.PHONY : val/validate_bitwise.cpp.s + +val/validate_builtins.o: val/validate_builtins.cpp.o + +.PHONY : val/validate_builtins.o + +# target to build an object file +val/validate_builtins.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.o +.PHONY : val/validate_builtins.cpp.o + +val/validate_builtins.i: val/validate_builtins.cpp.i + +.PHONY : val/validate_builtins.i + +# target to preprocess a source file +val/validate_builtins.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.i +.PHONY : val/validate_builtins.cpp.i + +val/validate_builtins.s: val/validate_builtins.cpp.s + +.PHONY : val/validate_builtins.s + +# target to generate assembly for a file +val/validate_builtins.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_builtins.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_builtins.cpp.s +.PHONY : val/validate_builtins.cpp.s + +val/validate_capability.o: val/validate_capability.cpp.o + +.PHONY : val/validate_capability.o + +# target to build an object file +val/validate_capability.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.o +.PHONY : val/validate_capability.cpp.o + +val/validate_capability.i: val/validate_capability.cpp.i + +.PHONY : val/validate_capability.i + +# target to preprocess a source file +val/validate_capability.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.i +.PHONY : val/validate_capability.cpp.i + +val/validate_capability.s: val/validate_capability.cpp.s + +.PHONY : val/validate_capability.s + +# target to generate assembly for a file +val/validate_capability.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_capability.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_capability.cpp.s +.PHONY : val/validate_capability.cpp.s + +val/validate_cfg.o: val/validate_cfg.cpp.o + +.PHONY : val/validate_cfg.o + +# target to build an object file +val/validate_cfg.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.o +.PHONY : val/validate_cfg.cpp.o + +val/validate_cfg.i: val/validate_cfg.cpp.i + +.PHONY : val/validate_cfg.i + +# target to preprocess a source file +val/validate_cfg.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.i +.PHONY : val/validate_cfg.cpp.i + +val/validate_cfg.s: val/validate_cfg.cpp.s + +.PHONY : val/validate_cfg.s + +# target to generate assembly for a file +val/validate_cfg.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_cfg.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_cfg.cpp.s +.PHONY : val/validate_cfg.cpp.s + +val/validate_composites.o: val/validate_composites.cpp.o + +.PHONY : val/validate_composites.o + +# target to build an object file +val/validate_composites.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.o +.PHONY : val/validate_composites.cpp.o + +val/validate_composites.i: val/validate_composites.cpp.i + +.PHONY : val/validate_composites.i + +# target to preprocess a source file +val/validate_composites.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.i +.PHONY : val/validate_composites.cpp.i + +val/validate_composites.s: val/validate_composites.cpp.s + +.PHONY : val/validate_composites.s + +# target to generate assembly for a file +val/validate_composites.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_composites.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_composites.cpp.s +.PHONY : val/validate_composites.cpp.s + +val/validate_constants.o: val/validate_constants.cpp.o + +.PHONY : val/validate_constants.o + +# target to build an object file +val/validate_constants.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.o +.PHONY : val/validate_constants.cpp.o + +val/validate_constants.i: val/validate_constants.cpp.i + +.PHONY : val/validate_constants.i + +# target to preprocess a source file +val/validate_constants.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.i +.PHONY : val/validate_constants.cpp.i + +val/validate_constants.s: val/validate_constants.cpp.s + +.PHONY : val/validate_constants.s + +# target to generate assembly for a file +val/validate_constants.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_constants.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_constants.cpp.s +.PHONY : val/validate_constants.cpp.s + +val/validate_conversion.o: val/validate_conversion.cpp.o + +.PHONY : val/validate_conversion.o + +# target to build an object file +val/validate_conversion.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.o +.PHONY : val/validate_conversion.cpp.o + +val/validate_conversion.i: val/validate_conversion.cpp.i + +.PHONY : val/validate_conversion.i + +# target to preprocess a source file +val/validate_conversion.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.i +.PHONY : val/validate_conversion.cpp.i + +val/validate_conversion.s: val/validate_conversion.cpp.s + +.PHONY : val/validate_conversion.s + +# target to generate assembly for a file +val/validate_conversion.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_conversion.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_conversion.cpp.s +.PHONY : val/validate_conversion.cpp.s + +val/validate_datarules.o: val/validate_datarules.cpp.o + +.PHONY : val/validate_datarules.o + +# target to build an object file +val/validate_datarules.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.o +.PHONY : val/validate_datarules.cpp.o + +val/validate_datarules.i: val/validate_datarules.cpp.i + +.PHONY : val/validate_datarules.i + +# target to preprocess a source file +val/validate_datarules.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.i +.PHONY : val/validate_datarules.cpp.i + +val/validate_datarules.s: val/validate_datarules.cpp.s + +.PHONY : val/validate_datarules.s + +# target to generate assembly for a file +val/validate_datarules.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_datarules.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_datarules.cpp.s +.PHONY : val/validate_datarules.cpp.s + +val/validate_debug.o: val/validate_debug.cpp.o + +.PHONY : val/validate_debug.o + +# target to build an object file +val/validate_debug.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.o +.PHONY : val/validate_debug.cpp.o + +val/validate_debug.i: val/validate_debug.cpp.i + +.PHONY : val/validate_debug.i + +# target to preprocess a source file +val/validate_debug.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.i +.PHONY : val/validate_debug.cpp.i + +val/validate_debug.s: val/validate_debug.cpp.s + +.PHONY : val/validate_debug.s + +# target to generate assembly for a file +val/validate_debug.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_debug.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_debug.cpp.s +.PHONY : val/validate_debug.cpp.s + +val/validate_decorations.o: val/validate_decorations.cpp.o + +.PHONY : val/validate_decorations.o + +# target to build an object file +val/validate_decorations.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.o +.PHONY : val/validate_decorations.cpp.o + +val/validate_decorations.i: val/validate_decorations.cpp.i + +.PHONY : val/validate_decorations.i + +# target to preprocess a source file +val/validate_decorations.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.i +.PHONY : val/validate_decorations.cpp.i + +val/validate_decorations.s: val/validate_decorations.cpp.s + +.PHONY : val/validate_decorations.s + +# target to generate assembly for a file +val/validate_decorations.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_decorations.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_decorations.cpp.s +.PHONY : val/validate_decorations.cpp.s + +val/validate_derivatives.o: val/validate_derivatives.cpp.o + +.PHONY : val/validate_derivatives.o + +# target to build an object file +val/validate_derivatives.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.o +.PHONY : val/validate_derivatives.cpp.o + +val/validate_derivatives.i: val/validate_derivatives.cpp.i + +.PHONY : val/validate_derivatives.i + +# target to preprocess a source file +val/validate_derivatives.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.i +.PHONY : val/validate_derivatives.cpp.i + +val/validate_derivatives.s: val/validate_derivatives.cpp.s + +.PHONY : val/validate_derivatives.s + +# target to generate assembly for a file +val/validate_derivatives.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_derivatives.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_derivatives.cpp.s +.PHONY : val/validate_derivatives.cpp.s + +val/validate_execution_limitations.o: val/validate_execution_limitations.cpp.o + +.PHONY : val/validate_execution_limitations.o + +# target to build an object file +val/validate_execution_limitations.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.o +.PHONY : val/validate_execution_limitations.cpp.o + +val/validate_execution_limitations.i: val/validate_execution_limitations.cpp.i + +.PHONY : val/validate_execution_limitations.i + +# target to preprocess a source file +val/validate_execution_limitations.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.i +.PHONY : val/validate_execution_limitations.cpp.i + +val/validate_execution_limitations.s: val/validate_execution_limitations.cpp.s + +.PHONY : val/validate_execution_limitations.s + +# target to generate assembly for a file +val/validate_execution_limitations.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_execution_limitations.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_execution_limitations.cpp.s +.PHONY : val/validate_execution_limitations.cpp.s + +val/validate_ext_inst.o: val/validate_ext_inst.cpp.o + +.PHONY : val/validate_ext_inst.o + +# target to build an object file +val/validate_ext_inst.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.o +.PHONY : val/validate_ext_inst.cpp.o + +val/validate_ext_inst.i: val/validate_ext_inst.cpp.i + +.PHONY : val/validate_ext_inst.i + +# target to preprocess a source file +val/validate_ext_inst.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.i +.PHONY : val/validate_ext_inst.cpp.i + +val/validate_ext_inst.s: val/validate_ext_inst.cpp.s + +.PHONY : val/validate_ext_inst.s + +# target to generate assembly for a file +val/validate_ext_inst.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_ext_inst.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_ext_inst.cpp.s +.PHONY : val/validate_ext_inst.cpp.s + +val/validate_function.o: val/validate_function.cpp.o + +.PHONY : val/validate_function.o + +# target to build an object file +val/validate_function.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.o +.PHONY : val/validate_function.cpp.o + +val/validate_function.i: val/validate_function.cpp.i + +.PHONY : val/validate_function.i + +# target to preprocess a source file +val/validate_function.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.i +.PHONY : val/validate_function.cpp.i + +val/validate_function.s: val/validate_function.cpp.s + +.PHONY : val/validate_function.s + +# target to generate assembly for a file +val/validate_function.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_function.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_function.cpp.s +.PHONY : val/validate_function.cpp.s + +val/validate_id.o: val/validate_id.cpp.o + +.PHONY : val/validate_id.o + +# target to build an object file +val/validate_id.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.o +.PHONY : val/validate_id.cpp.o + +val/validate_id.i: val/validate_id.cpp.i + +.PHONY : val/validate_id.i + +# target to preprocess a source file +val/validate_id.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.i +.PHONY : val/validate_id.cpp.i + +val/validate_id.s: val/validate_id.cpp.s + +.PHONY : val/validate_id.s + +# target to generate assembly for a file +val/validate_id.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_id.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_id.cpp.s +.PHONY : val/validate_id.cpp.s + +val/validate_image.o: val/validate_image.cpp.o + +.PHONY : val/validate_image.o + +# target to build an object file +val/validate_image.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.o +.PHONY : val/validate_image.cpp.o + +val/validate_image.i: val/validate_image.cpp.i + +.PHONY : val/validate_image.i + +# target to preprocess a source file +val/validate_image.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.i +.PHONY : val/validate_image.cpp.i + +val/validate_image.s: val/validate_image.cpp.s + +.PHONY : val/validate_image.s + +# target to generate assembly for a file +val/validate_image.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_image.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_image.cpp.s +.PHONY : val/validate_image.cpp.s + +val/validate_instruction.o: val/validate_instruction.cpp.o + +.PHONY : val/validate_instruction.o + +# target to build an object file +val/validate_instruction.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.o +.PHONY : val/validate_instruction.cpp.o + +val/validate_instruction.i: val/validate_instruction.cpp.i + +.PHONY : val/validate_instruction.i + +# target to preprocess a source file +val/validate_instruction.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.i +.PHONY : val/validate_instruction.cpp.i + +val/validate_instruction.s: val/validate_instruction.cpp.s + +.PHONY : val/validate_instruction.s + +# target to generate assembly for a file +val/validate_instruction.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_instruction.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_instruction.cpp.s +.PHONY : val/validate_instruction.cpp.s + +val/validate_interfaces.o: val/validate_interfaces.cpp.o + +.PHONY : val/validate_interfaces.o + +# target to build an object file +val/validate_interfaces.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.o +.PHONY : val/validate_interfaces.cpp.o + +val/validate_interfaces.i: val/validate_interfaces.cpp.i + +.PHONY : val/validate_interfaces.i + +# target to preprocess a source file +val/validate_interfaces.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.i +.PHONY : val/validate_interfaces.cpp.i + +val/validate_interfaces.s: val/validate_interfaces.cpp.s + +.PHONY : val/validate_interfaces.s + +# target to generate assembly for a file +val/validate_interfaces.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_interfaces.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_interfaces.cpp.s +.PHONY : val/validate_interfaces.cpp.s + +val/validate_layout.o: val/validate_layout.cpp.o + +.PHONY : val/validate_layout.o + +# target to build an object file +val/validate_layout.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.o +.PHONY : val/validate_layout.cpp.o + +val/validate_layout.i: val/validate_layout.cpp.i + +.PHONY : val/validate_layout.i + +# target to preprocess a source file +val/validate_layout.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.i +.PHONY : val/validate_layout.cpp.i + +val/validate_layout.s: val/validate_layout.cpp.s + +.PHONY : val/validate_layout.s + +# target to generate assembly for a file +val/validate_layout.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_layout.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_layout.cpp.s +.PHONY : val/validate_layout.cpp.s + +val/validate_literals.o: val/validate_literals.cpp.o + +.PHONY : val/validate_literals.o + +# target to build an object file +val/validate_literals.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.o +.PHONY : val/validate_literals.cpp.o + +val/validate_literals.i: val/validate_literals.cpp.i + +.PHONY : val/validate_literals.i + +# target to preprocess a source file +val/validate_literals.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.i +.PHONY : val/validate_literals.cpp.i + +val/validate_literals.s: val/validate_literals.cpp.s + +.PHONY : val/validate_literals.s + +# target to generate assembly for a file +val/validate_literals.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_literals.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_literals.cpp.s +.PHONY : val/validate_literals.cpp.s + +val/validate_logicals.o: val/validate_logicals.cpp.o + +.PHONY : val/validate_logicals.o + +# target to build an object file +val/validate_logicals.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.o +.PHONY : val/validate_logicals.cpp.o + +val/validate_logicals.i: val/validate_logicals.cpp.i + +.PHONY : val/validate_logicals.i + +# target to preprocess a source file +val/validate_logicals.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.i +.PHONY : val/validate_logicals.cpp.i + +val/validate_logicals.s: val/validate_logicals.cpp.s + +.PHONY : val/validate_logicals.s + +# target to generate assembly for a file +val/validate_logicals.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_logicals.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_logicals.cpp.s +.PHONY : val/validate_logicals.cpp.s + +val/validate_memory.o: val/validate_memory.cpp.o + +.PHONY : val/validate_memory.o + +# target to build an object file +val/validate_memory.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.o +.PHONY : val/validate_memory.cpp.o + +val/validate_memory.i: val/validate_memory.cpp.i + +.PHONY : val/validate_memory.i + +# target to preprocess a source file +val/validate_memory.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.i +.PHONY : val/validate_memory.cpp.i + +val/validate_memory.s: val/validate_memory.cpp.s + +.PHONY : val/validate_memory.s + +# target to generate assembly for a file +val/validate_memory.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_memory.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_memory.cpp.s +.PHONY : val/validate_memory.cpp.s + +val/validate_mode_setting.o: val/validate_mode_setting.cpp.o + +.PHONY : val/validate_mode_setting.o + +# target to build an object file +val/validate_mode_setting.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.o +.PHONY : val/validate_mode_setting.cpp.o + +val/validate_mode_setting.i: val/validate_mode_setting.cpp.i + +.PHONY : val/validate_mode_setting.i + +# target to preprocess a source file +val/validate_mode_setting.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.i +.PHONY : val/validate_mode_setting.cpp.i + +val/validate_mode_setting.s: val/validate_mode_setting.cpp.s + +.PHONY : val/validate_mode_setting.s + +# target to generate assembly for a file +val/validate_mode_setting.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_mode_setting.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_mode_setting.cpp.s +.PHONY : val/validate_mode_setting.cpp.s + +val/validate_non_uniform.o: val/validate_non_uniform.cpp.o + +.PHONY : val/validate_non_uniform.o + +# target to build an object file +val/validate_non_uniform.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.o +.PHONY : val/validate_non_uniform.cpp.o + +val/validate_non_uniform.i: val/validate_non_uniform.cpp.i + +.PHONY : val/validate_non_uniform.i + +# target to preprocess a source file +val/validate_non_uniform.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.i +.PHONY : val/validate_non_uniform.cpp.i + +val/validate_non_uniform.s: val/validate_non_uniform.cpp.s + +.PHONY : val/validate_non_uniform.s + +# target to generate assembly for a file +val/validate_non_uniform.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_non_uniform.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_non_uniform.cpp.s +.PHONY : val/validate_non_uniform.cpp.s + +val/validate_primitives.o: val/validate_primitives.cpp.o + +.PHONY : val/validate_primitives.o + +# target to build an object file +val/validate_primitives.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.o +.PHONY : val/validate_primitives.cpp.o + +val/validate_primitives.i: val/validate_primitives.cpp.i + +.PHONY : val/validate_primitives.i + +# target to preprocess a source file +val/validate_primitives.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.i +.PHONY : val/validate_primitives.cpp.i + +val/validate_primitives.s: val/validate_primitives.cpp.s + +.PHONY : val/validate_primitives.s + +# target to generate assembly for a file +val/validate_primitives.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_primitives.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_primitives.cpp.s +.PHONY : val/validate_primitives.cpp.s + +val/validate_type.o: val/validate_type.cpp.o + +.PHONY : val/validate_type.o + +# target to build an object file +val/validate_type.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.o +.PHONY : val/validate_type.cpp.o + +val/validate_type.i: val/validate_type.cpp.i + +.PHONY : val/validate_type.i + +# target to preprocess a source file +val/validate_type.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.i +.PHONY : val/validate_type.cpp.i + +val/validate_type.s: val/validate_type.cpp.s + +.PHONY : val/validate_type.s + +# target to generate assembly for a file +val/validate_type.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validate_type.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validate_type.cpp.s +.PHONY : val/validate_type.cpp.s + +val/validation_state.o: val/validation_state.cpp.o + +.PHONY : val/validation_state.o + +# target to build an object file +val/validation_state.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.o +.PHONY : val/validation_state.cpp.o + +val/validation_state.i: val/validation_state.cpp.i + +.PHONY : val/validation_state.i + +# target to preprocess a source file +val/validation_state.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.i +.PHONY : val/validation_state.cpp.i + +val/validation_state.s: val/validation_state.cpp.s + +.PHONY : val/validation_state.s + +# target to generate assembly for a file +val/validation_state.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools.dir/build.make source/CMakeFiles/SPIRV-Tools.dir/val/validation_state.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/CMakeFiles/SPIRV-Tools-shared.dir/build.make source/CMakeFiles/SPIRV-Tools-shared.dir/val/validation_state.cpp.s +.PHONY : val/validation_state.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... spirv-tools-debuginfo" + @echo "... rebuild_cache" + @echo "... spirv-tools-spv-amd-shader-ballot" + @echo "... spirv-tools-spv-amd-shader-trinary-minmax" + @echo "... spirv-tools-spv-amd-gcn-shader" + @echo "... install/strip" + @echo "... spirv-tools-header-DebugInfo" + @echo "... spirv-tools-build-version" + @echo "... edit_cache" + @echo "... SPIRV-Tools" + @echo "... list_install_components" + @echo "... spirv-tools-spv-amd-shader-explicit-vertex-parameter" + @echo "... test" + @echo "... SPIRV-Tools-shared" + @echo "... spirv-tools-vimsyntax" + @echo "... install/local" + @echo "... assembly_grammar.o" + @echo "... assembly_grammar.i" + @echo "... assembly_grammar.s" + @echo "... binary.o" + @echo "... binary.i" + @echo "... binary.s" + @echo "... diagnostic.o" + @echo "... diagnostic.i" + @echo "... diagnostic.s" + @echo "... disassemble.o" + @echo "... disassemble.i" + @echo "... disassemble.s" + @echo "... enum_string_mapping.o" + @echo "... enum_string_mapping.i" + @echo "... enum_string_mapping.s" + @echo "... ext_inst.o" + @echo "... ext_inst.i" + @echo "... ext_inst.s" + @echo "... extensions.o" + @echo "... extensions.i" + @echo "... extensions.s" + @echo "... id_descriptor.o" + @echo "... id_descriptor.i" + @echo "... id_descriptor.s" + @echo "... libspirv.o" + @echo "... libspirv.i" + @echo "... libspirv.s" + @echo "... name_mapper.o" + @echo "... name_mapper.i" + @echo "... name_mapper.s" + @echo "... opcode.o" + @echo "... opcode.i" + @echo "... opcode.s" + @echo "... operand.o" + @echo "... operand.i" + @echo "... operand.s" + @echo "... parsed_operand.o" + @echo "... parsed_operand.i" + @echo "... parsed_operand.s" + @echo "... print.o" + @echo "... print.i" + @echo "... print.s" + @echo "... software_version.o" + @echo "... software_version.i" + @echo "... software_version.s" + @echo "... spirv_endian.o" + @echo "... spirv_endian.i" + @echo "... spirv_endian.s" + @echo "... spirv_optimizer_options.o" + @echo "... spirv_optimizer_options.i" + @echo "... spirv_optimizer_options.s" + @echo "... spirv_target_env.o" + @echo "... spirv_target_env.i" + @echo "... spirv_target_env.s" + @echo "... spirv_validator_options.o" + @echo "... spirv_validator_options.i" + @echo "... spirv_validator_options.s" + @echo "... table.o" + @echo "... table.i" + @echo "... table.s" + @echo "... text.o" + @echo "... text.i" + @echo "... text.s" + @echo "... text_handler.o" + @echo "... text_handler.i" + @echo "... text_handler.s" + @echo "... util/bit_vector.o" + @echo "... util/bit_vector.i" + @echo "... util/bit_vector.s" + @echo "... util/parse_number.o" + @echo "... util/parse_number.i" + @echo "... util/parse_number.s" + @echo "... util/string_utils.o" + @echo "... util/string_utils.i" + @echo "... util/string_utils.s" + @echo "... util/timer.o" + @echo "... util/timer.i" + @echo "... util/timer.s" + @echo "... val/basic_block.o" + @echo "... val/basic_block.i" + @echo "... val/basic_block.s" + @echo "... val/construct.o" + @echo "... val/construct.i" + @echo "... val/construct.s" + @echo "... val/function.o" + @echo "... val/function.i" + @echo "... val/function.s" + @echo "... val/instruction.o" + @echo "... val/instruction.i" + @echo "... val/instruction.s" + @echo "... val/validate.o" + @echo "... val/validate.i" + @echo "... val/validate.s" + @echo "... val/validate_adjacency.o" + @echo "... val/validate_adjacency.i" + @echo "... val/validate_adjacency.s" + @echo "... val/validate_annotation.o" + @echo "... val/validate_annotation.i" + @echo "... val/validate_annotation.s" + @echo "... val/validate_arithmetics.o" + @echo "... val/validate_arithmetics.i" + @echo "... val/validate_arithmetics.s" + @echo "... val/validate_atomics.o" + @echo "... val/validate_atomics.i" + @echo "... val/validate_atomics.s" + @echo "... val/validate_barriers.o" + @echo "... val/validate_barriers.i" + @echo "... val/validate_barriers.s" + @echo "... val/validate_bitwise.o" + @echo "... val/validate_bitwise.i" + @echo "... val/validate_bitwise.s" + @echo "... val/validate_builtins.o" + @echo "... val/validate_builtins.i" + @echo "... val/validate_builtins.s" + @echo "... val/validate_capability.o" + @echo "... val/validate_capability.i" + @echo "... val/validate_capability.s" + @echo "... val/validate_cfg.o" + @echo "... val/validate_cfg.i" + @echo "... val/validate_cfg.s" + @echo "... val/validate_composites.o" + @echo "... val/validate_composites.i" + @echo "... val/validate_composites.s" + @echo "... val/validate_constants.o" + @echo "... val/validate_constants.i" + @echo "... val/validate_constants.s" + @echo "... val/validate_conversion.o" + @echo "... val/validate_conversion.i" + @echo "... val/validate_conversion.s" + @echo "... val/validate_datarules.o" + @echo "... val/validate_datarules.i" + @echo "... val/validate_datarules.s" + @echo "... val/validate_debug.o" + @echo "... val/validate_debug.i" + @echo "... val/validate_debug.s" + @echo "... val/validate_decorations.o" + @echo "... val/validate_decorations.i" + @echo "... val/validate_decorations.s" + @echo "... val/validate_derivatives.o" + @echo "... val/validate_derivatives.i" + @echo "... val/validate_derivatives.s" + @echo "... val/validate_execution_limitations.o" + @echo "... val/validate_execution_limitations.i" + @echo "... val/validate_execution_limitations.s" + @echo "... val/validate_ext_inst.o" + @echo "... val/validate_ext_inst.i" + @echo "... val/validate_ext_inst.s" + @echo "... val/validate_function.o" + @echo "... val/validate_function.i" + @echo "... val/validate_function.s" + @echo "... val/validate_id.o" + @echo "... val/validate_id.i" + @echo "... val/validate_id.s" + @echo "... val/validate_image.o" + @echo "... val/validate_image.i" + @echo "... val/validate_image.s" + @echo "... val/validate_instruction.o" + @echo "... val/validate_instruction.i" + @echo "... val/validate_instruction.s" + @echo "... val/validate_interfaces.o" + @echo "... val/validate_interfaces.i" + @echo "... val/validate_interfaces.s" + @echo "... val/validate_layout.o" + @echo "... val/validate_layout.i" + @echo "... val/validate_layout.s" + @echo "... val/validate_literals.o" + @echo "... val/validate_literals.i" + @echo "... val/validate_literals.s" + @echo "... val/validate_logicals.o" + @echo "... val/validate_logicals.i" + @echo "... val/validate_logicals.s" + @echo "... val/validate_memory.o" + @echo "... val/validate_memory.i" + @echo "... val/validate_memory.s" + @echo "... val/validate_mode_setting.o" + @echo "... val/validate_mode_setting.i" + @echo "... val/validate_mode_setting.s" + @echo "... val/validate_non_uniform.o" + @echo "... val/validate_non_uniform.i" + @echo "... val/validate_non_uniform.s" + @echo "... val/validate_primitives.o" + @echo "... val/validate_primitives.i" + @echo "... val/validate_primitives.s" + @echo "... val/validate_type.o" + @echo "... val/validate_type.i" + @echo "... val/validate_type.s" + @echo "... val/validation_state.o" + @echo "... val/validation_state.i" + @echo "... val/validation_state.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/source/cmake_install.cmake b/3rdparty/spirv-tools/build/source/cmake_install.cmake new file mode 100644 index 000000000..196849dff --- /dev/null +++ b/3rdparty/spirv-tools/build/source/cmake_install.cmake @@ -0,0 +1,62 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/libSPIRV-Tools.a") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libSPIRV-Tools-shared.so" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libSPIRV-Tools-shared.so") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libSPIRV-Tools-shared.so" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/libSPIRV-Tools-shared.so") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libSPIRV-Tools-shared.so" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libSPIRV-Tools-shared.so") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libSPIRV-Tools-shared.so") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/cmake_install.cmake") + +endif() + diff --git a/3rdparty/spirv-tools/build/source/comp/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/source/comp/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/comp/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/source/comp/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/source/comp/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/comp/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/source/comp/CTestTestfile.cmake b/3rdparty/spirv-tools/build/source/comp/CTestTestfile.cmake new file mode 100644 index 000000000..ae8de8d9e --- /dev/null +++ b/3rdparty/spirv-tools/build/source/comp/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/comp +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/source/comp/Makefile b/3rdparty/spirv-tools/build/source/comp/Makefile new file mode 100644 index 000000000..b6a3b3ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/comp/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/comp/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/comp/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/comp/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/comp/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/comp/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/source/comp/cmake_install.cmake b/3rdparty/spirv-tools/build/source/comp/cmake_install.cmake new file mode 100644 index 000000000..ce5dcb1e1 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/comp/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/comp + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/source/link/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/DependInfo.cmake new file mode 100644 index 000000000..b891d51ee --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link/linker.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "../include" + "../external/SPIRV-Headers/include" + "." + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make new file mode 100644 index 000000000..188ea1174 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include source/link/CMakeFiles/SPIRV-Tools-link.dir/depend.make + +# Include the progress variables for this target. +include source/link/CMakeFiles/SPIRV-Tools-link.dir/progress.make + +# Include the compile flags for this target's objects. +include source/link/CMakeFiles/SPIRV-Tools-link.dir/flags.make + +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o: source/link/CMakeFiles/SPIRV-Tools-link.dir/flags.make +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o: ../source/link/linker.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link/linker.cpp + +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link/linker.cpp > CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.i + +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link/linker.cpp -o CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.s + +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.requires: + +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.requires + +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.provides: source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.requires + $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.provides.build +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.provides + +source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.provides.build: source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o + + +# Object files for target SPIRV-Tools-link +SPIRV__Tools__link_OBJECTS = \ +"CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o" + +# External object files for target SPIRV-Tools-link +SPIRV__Tools__link_EXTERNAL_OBJECTS = + +source/link/libSPIRV-Tools-link.a: source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o +source/link/libSPIRV-Tools-link.a: source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make +source/link/libSPIRV-Tools-link.a: source/link/CMakeFiles/SPIRV-Tools-link.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libSPIRV-Tools-link.a" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools-link.dir/cmake_clean_target.cmake + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/SPIRV-Tools-link.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +source/link/CMakeFiles/SPIRV-Tools-link.dir/build: source/link/libSPIRV-Tools-link.a + +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/build + +source/link/CMakeFiles/SPIRV-Tools-link.dir/requires: source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o.requires + +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/requires + +source/link/CMakeFiles/SPIRV-Tools-link.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools-link.dir/cmake_clean.cmake +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/clean + +source/link/CMakeFiles/SPIRV-Tools-link.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/cmake_clean.cmake new file mode 100644 index 000000000..53aa18fdc --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o" + "libSPIRV-Tools-link.pdb" + "libSPIRV-Tools-link.a" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/SPIRV-Tools-link.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/cmake_clean_target.cmake b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/cmake_clean_target.cmake new file mode 100644 index 000000000..c3d760cd7 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libSPIRV-Tools-link.a" +) diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/depend.make b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/depend.make new file mode 100644 index 000000000..8c19a11ac --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for SPIRV-Tools-link. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/flags.make b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/flags.make new file mode 100644 index 000000000..5e2e32686 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIC -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/link.txt b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/link.txt new file mode 100644 index 000000000..c7f6a620a --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libSPIRV-Tools-link.a CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o +/usr/bin/ranlib libSPIRV-Tools-link.a diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/progress.make b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/progress.make new file mode 100644 index 000000000..b2fb3ce84 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 29 + diff --git a/3rdparty/spirv-tools/build/source/link/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/source/link/CMakeFiles/progress.marks new file mode 100644 index 000000000..abdfb053e --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CMakeFiles/progress.marks @@ -0,0 +1 @@ +60 diff --git a/3rdparty/spirv-tools/build/source/link/CTestTestfile.cmake b/3rdparty/spirv-tools/build/source/link/CTestTestfile.cmake new file mode 100644 index 000000000..ecc2334b3 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(spirv-tools-symbol-exports-SPIRV-Tools-link "/usr/bin/python" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/check_symbol_exports.py" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/libSPIRV-Tools-link.a") diff --git a/3rdparty/spirv-tools/build/source/link/Makefile b/3rdparty/spirv-tools/build/source/link/Makefile new file mode 100644 index 000000000..072a55780 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/Makefile @@ -0,0 +1,240 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/link/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/link/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/link/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/link/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +source/link/CMakeFiles/SPIRV-Tools-link.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/link/CMakeFiles/SPIRV-Tools-link.dir/rule +.PHONY : source/link/CMakeFiles/SPIRV-Tools-link.dir/rule + +# Convenience name for target. +SPIRV-Tools-link: source/link/CMakeFiles/SPIRV-Tools-link.dir/rule + +.PHONY : SPIRV-Tools-link + +# fast build rule for target. +SPIRV-Tools-link/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/build +.PHONY : SPIRV-Tools-link/fast + +linker.o: linker.cpp.o + +.PHONY : linker.o + +# target to build an object file +linker.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.o +.PHONY : linker.cpp.o + +linker.i: linker.cpp.i + +.PHONY : linker.i + +# target to preprocess a source file +linker.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.i +.PHONY : linker.cpp.i + +linker.s: linker.cpp.s + +.PHONY : linker.s + +# target to generate assembly for a file +linker.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/link/CMakeFiles/SPIRV-Tools-link.dir/build.make source/link/CMakeFiles/SPIRV-Tools-link.dir/linker.cpp.s +.PHONY : linker.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... rebuild_cache" + @echo "... install/strip" + @echo "... SPIRV-Tools-link" + @echo "... edit_cache" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... linker.o" + @echo "... linker.i" + @echo "... linker.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/source/link/cmake_install.cmake b/3rdparty/spirv-tools/build/source/link/cmake_install.cmake new file mode 100644 index 000000000..c08d62398 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/link/cmake_install.cmake @@ -0,0 +1,38 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/link + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/libSPIRV-Tools-link.a") +endif() + diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake new file mode 100644 index 000000000..6bde6edde --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake @@ -0,0 +1,115 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/aggressive_dead_code_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/basic_block.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/block_merge_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/build_module.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ccp_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg_cleanup_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/combine_access_chains.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/common_uniform_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/compact_ids_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/composite.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/const_folding_rules.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/constants.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/copy_prop_arrays.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_branch_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_insert_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_variable_elimination.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/decoration_manager.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/def_use_manager.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_analysis.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_tree.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_constant_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_functions_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/feature_manager.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/flatten_decoration_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold_spec_constant_op_and_composite_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/folding_rules.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/freeze_spec_constant_value_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/function.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/if_conversion.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_exhaustive_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_opaque_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction_list.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_context.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_loader.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/licm_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_access_chain_convert_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_redundancy_elimination.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_block_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_store_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_ssa_elim_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence_helpers.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_descriptor.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fission.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_peeling.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unroller.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unswitch_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_utils.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/mem_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/merge_return_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/module.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/optimizer.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass_manager.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/private_to_local_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/propagator.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/reduce_load_size.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/redundancy_elimination.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/register_pressure.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/remove_duplicates_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/replace_invalid_opc.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis_simplification.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_replacement_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/set_spec_constant_default_value_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/simplification_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ssa_rewrite_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strength_reduction_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_debug_info_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_reflect_info_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/struct_cfg_analysis.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/type_manager.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/types.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/unify_const_pass.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/value_number_table.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/vector_dce.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/workaround1209.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "../include" + "../external/SPIRV-Headers/include" + "." + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make new file mode 100644 index 000000000..c17ac99f6 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make @@ -0,0 +1,2328 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend.make + +# Include the progress variables for this target. +include source/opt/CMakeFiles/SPIRV-Tools-opt.dir/progress.make + +# Include the compile flags for this target's objects. +include source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o: ../source/opt/aggressive_dead_code_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/aggressive_dead_code_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/aggressive_dead_code_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/aggressive_dead_code_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o: ../source/opt/basic_block.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/basic_block.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/basic_block.cpp > CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/basic_block.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o: ../source/opt/block_merge_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/block_merge_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/block_merge_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/block_merge_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o: ../source/opt/build_module.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/build_module.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/build_module.cpp > CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/build_module.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o: ../source/opt/ccp_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ccp_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ccp_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ccp_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o: ../source/opt/cfg_cleanup_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg_cleanup_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg_cleanup_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg_cleanup_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o: ../source/opt/cfg.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg.cpp > CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/cfg.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o: ../source/opt/combine_access_chains.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/combine_access_chains.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/combine_access_chains.cpp > CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/combine_access_chains.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o: ../source/opt/common_uniform_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/common_uniform_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/common_uniform_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/common_uniform_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o: ../source/opt/compact_ids_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/compact_ids_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/compact_ids_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/compact_ids_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o: ../source/opt/composite.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/composite.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/composite.cpp > CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/composite.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o: ../source/opt/const_folding_rules.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/const_folding_rules.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/const_folding_rules.cpp > CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/const_folding_rules.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o: ../source/opt/constants.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/constants.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/constants.cpp > CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/constants.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o: ../source/opt/copy_prop_arrays.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/copy_prop_arrays.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/copy_prop_arrays.cpp > CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/copy_prop_arrays.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o: ../source/opt/dead_branch_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_branch_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_branch_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_branch_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o: ../source/opt/dead_insert_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_insert_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_insert_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_insert_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o: ../source/opt/dead_variable_elimination.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_variable_elimination.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_variable_elimination.cpp > CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dead_variable_elimination.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o: ../source/opt/decoration_manager.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/decoration_manager.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/decoration_manager.cpp > CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/decoration_manager.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o: ../source/opt/def_use_manager.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/def_use_manager.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/def_use_manager.cpp > CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/def_use_manager.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o: ../source/opt/dominator_analysis.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_analysis.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_analysis.cpp > CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_analysis.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o: ../source/opt/dominator_tree.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_tree.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_tree.cpp > CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/dominator_tree.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o: ../source/opt/eliminate_dead_constant_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_constant_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_constant_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_constant_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o: ../source/opt/eliminate_dead_functions_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_functions_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_functions_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/eliminate_dead_functions_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o: ../source/opt/feature_manager.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/feature_manager.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/feature_manager.cpp > CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/feature_manager.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o: ../source/opt/flatten_decoration_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/flatten_decoration_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/flatten_decoration_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/flatten_decoration_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o: ../source/opt/fold.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold.cpp > CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o: ../source/opt/folding_rules.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/folding_rules.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/folding_rules.cpp > CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/folding_rules.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o: ../source/opt/fold_spec_constant_op_and_composite_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold_spec_constant_op_and_composite_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold_spec_constant_op_and_composite_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/fold_spec_constant_op_and_composite_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o: ../source/opt/freeze_spec_constant_value_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/freeze_spec_constant_value_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/freeze_spec_constant_value_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/freeze_spec_constant_value_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o: ../source/opt/function.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/function.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/function.cpp > CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/function.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o: ../source/opt/if_conversion.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_31) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/if_conversion.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/if_conversion.cpp > CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/if_conversion.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o: ../source/opt/inline_exhaustive_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_32) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_exhaustive_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_exhaustive_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_exhaustive_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o: ../source/opt/inline_opaque_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_33) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_opaque_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_opaque_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_opaque_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o: ../source/opt/inline_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_34) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/inline_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o: ../source/opt/instruction.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_35) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction.cpp > CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o: ../source/opt/instruction_list.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_36) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction_list.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction_list.cpp > CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/instruction_list.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o: ../source/opt/ir_context.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_37) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_context.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_context.cpp > CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_context.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o: ../source/opt/ir_loader.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_38) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_loader.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_loader.cpp > CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ir_loader.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o: ../source/opt/licm_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_39) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/licm_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/licm_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/licm_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o: ../source/opt/local_access_chain_convert_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_40) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_access_chain_convert_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_access_chain_convert_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_access_chain_convert_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o: ../source/opt/local_redundancy_elimination.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_41) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_redundancy_elimination.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_redundancy_elimination.cpp > CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_redundancy_elimination.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o: ../source/opt/local_single_block_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_42) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_block_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_block_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_block_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o: ../source/opt/local_single_store_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_43) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_store_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_store_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_single_store_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o: ../source/opt/local_ssa_elim_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_44) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_ssa_elim_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_ssa_elim_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/local_ssa_elim_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o: ../source/opt/loop_dependence.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_45) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o: ../source/opt/loop_dependence_helpers.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_46) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence_helpers.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence_helpers.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_dependence_helpers.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o: ../source/opt/loop_descriptor.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_47) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_descriptor.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_descriptor.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_descriptor.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o: ../source/opt/loop_fission.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_48) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fission.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fission.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fission.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o: ../source/opt/loop_fusion.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_49) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o: ../source/opt/loop_fusion_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_50) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_fusion_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o: ../source/opt/loop_peeling.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_51) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_peeling.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_peeling.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_peeling.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o: ../source/opt/loop_utils.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_52) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_utils.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_utils.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_utils.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o: ../source/opt/loop_unroller.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_53) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unroller.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unroller.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unroller.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o: ../source/opt/loop_unswitch_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_54) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unswitch_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unswitch_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/loop_unswitch_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o: ../source/opt/mem_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_55) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/mem_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/mem_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/mem_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o: ../source/opt/merge_return_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_56) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/merge_return_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/merge_return_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/merge_return_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o: ../source/opt/module.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_57) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/module.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/module.cpp > CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/module.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o: ../source/opt/optimizer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_58) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/optimizer.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/optimizer.cpp > CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/optimizer.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o: ../source/opt/pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_59) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o: ../source/opt/pass_manager.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_60) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass_manager.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass_manager.cpp > CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/pass_manager.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o: ../source/opt/private_to_local_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_61) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/private_to_local_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/private_to_local_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/private_to_local_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o: ../source/opt/propagator.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_62) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/propagator.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/propagator.cpp > CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/propagator.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o: ../source/opt/reduce_load_size.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_63) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/reduce_load_size.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/reduce_load_size.cpp > CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/reduce_load_size.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o: ../source/opt/redundancy_elimination.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_64) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/redundancy_elimination.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/redundancy_elimination.cpp > CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/redundancy_elimination.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o: ../source/opt/register_pressure.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_65) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/register_pressure.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/register_pressure.cpp > CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/register_pressure.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o: ../source/opt/remove_duplicates_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_66) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/remove_duplicates_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/remove_duplicates_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/remove_duplicates_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o: ../source/opt/replace_invalid_opc.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_67) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/replace_invalid_opc.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/replace_invalid_opc.cpp > CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/replace_invalid_opc.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o: ../source/opt/scalar_analysis.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_68) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis.cpp > CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o: ../source/opt/scalar_analysis_simplification.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_69) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis_simplification.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis_simplification.cpp > CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_analysis_simplification.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o: ../source/opt/scalar_replacement_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_70) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_replacement_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_replacement_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/scalar_replacement_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o: ../source/opt/set_spec_constant_default_value_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_71) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/set_spec_constant_default_value_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/set_spec_constant_default_value_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/set_spec_constant_default_value_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o: ../source/opt/simplification_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_72) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/simplification_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/simplification_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/simplification_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o: ../source/opt/ssa_rewrite_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_73) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ssa_rewrite_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ssa_rewrite_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/ssa_rewrite_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o: ../source/opt/strength_reduction_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_74) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strength_reduction_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strength_reduction_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strength_reduction_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o: ../source/opt/strip_debug_info_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_75) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_debug_info_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_debug_info_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_debug_info_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o: ../source/opt/strip_reflect_info_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_76) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_reflect_info_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_reflect_info_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/strip_reflect_info_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o: ../source/opt/struct_cfg_analysis.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_77) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/struct_cfg_analysis.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/struct_cfg_analysis.cpp > CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/struct_cfg_analysis.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o: ../source/opt/type_manager.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_78) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/type_manager.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/type_manager.cpp > CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/type_manager.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o: ../source/opt/types.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_79) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/types.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/types.cpp > CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/types.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o: ../source/opt/unify_const_pass.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_80) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/unify_const_pass.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/unify_const_pass.cpp > CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/unify_const_pass.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o: ../source/opt/value_number_table.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_81) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/value_number_table.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/value_number_table.cpp > CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/value_number_table.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o: ../source/opt/vector_dce.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_82) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/vector_dce.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/vector_dce.cpp > CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/vector_dce.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o + + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o: ../source/opt/workaround1209.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_83) "Building CXX object source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/workaround1209.cpp + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/workaround1209.cpp > CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.i + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt/workaround1209.cpp -o CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.s + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.requires: + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.provides: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.requires + $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.provides.build +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.provides + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.provides.build: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o + + +# Object files for target SPIRV-Tools-opt +SPIRV__Tools__opt_OBJECTS = \ +"CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o" \ +"CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o" + +# External object files for target SPIRV-Tools-opt +SPIRV__Tools__opt_EXTERNAL_OBJECTS = + +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make +source/opt/libSPIRV-Tools-opt.a: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_84) "Linking CXX static library libSPIRV-Tools-opt.a" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean_target.cmake + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/SPIRV-Tools-opt.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build: source/opt/libSPIRV-Tools-opt.a + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o.requires +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o.requires + +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/requires + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt && $(CMAKE_COMMAND) -P CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean.cmake +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/clean + +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend + diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean.cmake new file mode 100644 index 000000000..1bfac4180 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean.cmake @@ -0,0 +1,92 @@ +file(REMOVE_RECURSE + "CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o" + "CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o" + "libSPIRV-Tools-opt.pdb" + "libSPIRV-Tools-opt.a" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean_target.cmake b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean_target.cmake new file mode 100644 index 000000000..6ebd3d42c --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libSPIRV-Tools-opt.a" +) diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend.make b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend.make new file mode 100644 index 000000000..53482d50a --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for SPIRV-Tools-opt. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make new file mode 100644 index 000000000..5e2e32686 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIC -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/link.txt b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/link.txt new file mode 100644 index 000000000..b35fa3b08 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libSPIRV-Tools-opt.a CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o +/usr/bin/ranlib libSPIRV-Tools-opt.a diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/progress.make b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/progress.make new file mode 100644 index 000000000..714f2998c --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/progress.make @@ -0,0 +1,85 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 30 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 31 +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 32 +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = 33 +CMAKE_PROGRESS_12 = +CMAKE_PROGRESS_13 = 34 +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = 35 +CMAKE_PROGRESS_17 = +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = 36 +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = 37 +CMAKE_PROGRESS_22 = +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = 38 +CMAKE_PROGRESS_25 = +CMAKE_PROGRESS_26 = +CMAKE_PROGRESS_27 = 39 +CMAKE_PROGRESS_28 = +CMAKE_PROGRESS_29 = 40 +CMAKE_PROGRESS_30 = +CMAKE_PROGRESS_31 = +CMAKE_PROGRESS_32 = 41 +CMAKE_PROGRESS_33 = +CMAKE_PROGRESS_34 = +CMAKE_PROGRESS_35 = 42 +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = 43 +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = +CMAKE_PROGRESS_40 = 44 +CMAKE_PROGRESS_41 = +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = 45 +CMAKE_PROGRESS_44 = +CMAKE_PROGRESS_45 = 46 +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = +CMAKE_PROGRESS_48 = 47 +CMAKE_PROGRESS_49 = +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = 48 +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = 49 +CMAKE_PROGRESS_54 = +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = 50 +CMAKE_PROGRESS_57 = +CMAKE_PROGRESS_58 = +CMAKE_PROGRESS_59 = 51 +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = 52 +CMAKE_PROGRESS_62 = +CMAKE_PROGRESS_63 = +CMAKE_PROGRESS_64 = 53 +CMAKE_PROGRESS_65 = +CMAKE_PROGRESS_66 = +CMAKE_PROGRESS_67 = 54 +CMAKE_PROGRESS_68 = +CMAKE_PROGRESS_69 = 55 +CMAKE_PROGRESS_70 = +CMAKE_PROGRESS_71 = +CMAKE_PROGRESS_72 = 56 +CMAKE_PROGRESS_73 = +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = 57 +CMAKE_PROGRESS_76 = +CMAKE_PROGRESS_77 = 58 +CMAKE_PROGRESS_78 = +CMAKE_PROGRESS_79 = +CMAKE_PROGRESS_80 = 59 +CMAKE_PROGRESS_81 = +CMAKE_PROGRESS_82 = +CMAKE_PROGRESS_83 = 60 +CMAKE_PROGRESS_84 = + diff --git a/3rdparty/spirv-tools/build/source/opt/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/progress.marks new file mode 100644 index 000000000..04f9fe460 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CMakeFiles/progress.marks @@ -0,0 +1 @@ +59 diff --git a/3rdparty/spirv-tools/build/source/opt/CTestTestfile.cmake b/3rdparty/spirv-tools/build/source/opt/CTestTestfile.cmake new file mode 100644 index 000000000..5d319e9ae --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(spirv-tools-symbol-exports-SPIRV-Tools-opt "/usr/bin/python" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/utils/check_symbol_exports.py" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/libSPIRV-Tools-opt.a") diff --git a/3rdparty/spirv-tools/build/source/opt/Makefile b/3rdparty/spirv-tools/build/source/opt/Makefile new file mode 100644 index 000000000..55d48bcf1 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/Makefile @@ -0,0 +1,2700 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/opt/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/opt/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/opt/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/opt/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule +.PHONY : source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule + +# Convenience name for target. +SPIRV-Tools-opt: source/opt/CMakeFiles/SPIRV-Tools-opt.dir/rule + +.PHONY : SPIRV-Tools-opt + +# fast build rule for target. +SPIRV-Tools-opt/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build +.PHONY : SPIRV-Tools-opt/fast + +aggressive_dead_code_elim_pass.o: aggressive_dead_code_elim_pass.cpp.o + +.PHONY : aggressive_dead_code_elim_pass.o + +# target to build an object file +aggressive_dead_code_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.o +.PHONY : aggressive_dead_code_elim_pass.cpp.o + +aggressive_dead_code_elim_pass.i: aggressive_dead_code_elim_pass.cpp.i + +.PHONY : aggressive_dead_code_elim_pass.i + +# target to preprocess a source file +aggressive_dead_code_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.i +.PHONY : aggressive_dead_code_elim_pass.cpp.i + +aggressive_dead_code_elim_pass.s: aggressive_dead_code_elim_pass.cpp.s + +.PHONY : aggressive_dead_code_elim_pass.s + +# target to generate assembly for a file +aggressive_dead_code_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/aggressive_dead_code_elim_pass.cpp.s +.PHONY : aggressive_dead_code_elim_pass.cpp.s + +basic_block.o: basic_block.cpp.o + +.PHONY : basic_block.o + +# target to build an object file +basic_block.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.o +.PHONY : basic_block.cpp.o + +basic_block.i: basic_block.cpp.i + +.PHONY : basic_block.i + +# target to preprocess a source file +basic_block.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.i +.PHONY : basic_block.cpp.i + +basic_block.s: basic_block.cpp.s + +.PHONY : basic_block.s + +# target to generate assembly for a file +basic_block.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/basic_block.cpp.s +.PHONY : basic_block.cpp.s + +block_merge_pass.o: block_merge_pass.cpp.o + +.PHONY : block_merge_pass.o + +# target to build an object file +block_merge_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.o +.PHONY : block_merge_pass.cpp.o + +block_merge_pass.i: block_merge_pass.cpp.i + +.PHONY : block_merge_pass.i + +# target to preprocess a source file +block_merge_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.i +.PHONY : block_merge_pass.cpp.i + +block_merge_pass.s: block_merge_pass.cpp.s + +.PHONY : block_merge_pass.s + +# target to generate assembly for a file +block_merge_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/block_merge_pass.cpp.s +.PHONY : block_merge_pass.cpp.s + +build_module.o: build_module.cpp.o + +.PHONY : build_module.o + +# target to build an object file +build_module.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.o +.PHONY : build_module.cpp.o + +build_module.i: build_module.cpp.i + +.PHONY : build_module.i + +# target to preprocess a source file +build_module.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.i +.PHONY : build_module.cpp.i + +build_module.s: build_module.cpp.s + +.PHONY : build_module.s + +# target to generate assembly for a file +build_module.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build_module.cpp.s +.PHONY : build_module.cpp.s + +ccp_pass.o: ccp_pass.cpp.o + +.PHONY : ccp_pass.o + +# target to build an object file +ccp_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.o +.PHONY : ccp_pass.cpp.o + +ccp_pass.i: ccp_pass.cpp.i + +.PHONY : ccp_pass.i + +# target to preprocess a source file +ccp_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.i +.PHONY : ccp_pass.cpp.i + +ccp_pass.s: ccp_pass.cpp.s + +.PHONY : ccp_pass.s + +# target to generate assembly for a file +ccp_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ccp_pass.cpp.s +.PHONY : ccp_pass.cpp.s + +cfg.o: cfg.cpp.o + +.PHONY : cfg.o + +# target to build an object file +cfg.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.o +.PHONY : cfg.cpp.o + +cfg.i: cfg.cpp.i + +.PHONY : cfg.i + +# target to preprocess a source file +cfg.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.i +.PHONY : cfg.cpp.i + +cfg.s: cfg.cpp.s + +.PHONY : cfg.s + +# target to generate assembly for a file +cfg.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg.cpp.s +.PHONY : cfg.cpp.s + +cfg_cleanup_pass.o: cfg_cleanup_pass.cpp.o + +.PHONY : cfg_cleanup_pass.o + +# target to build an object file +cfg_cleanup_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.o +.PHONY : cfg_cleanup_pass.cpp.o + +cfg_cleanup_pass.i: cfg_cleanup_pass.cpp.i + +.PHONY : cfg_cleanup_pass.i + +# target to preprocess a source file +cfg_cleanup_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.i +.PHONY : cfg_cleanup_pass.cpp.i + +cfg_cleanup_pass.s: cfg_cleanup_pass.cpp.s + +.PHONY : cfg_cleanup_pass.s + +# target to generate assembly for a file +cfg_cleanup_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/cfg_cleanup_pass.cpp.s +.PHONY : cfg_cleanup_pass.cpp.s + +combine_access_chains.o: combine_access_chains.cpp.o + +.PHONY : combine_access_chains.o + +# target to build an object file +combine_access_chains.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.o +.PHONY : combine_access_chains.cpp.o + +combine_access_chains.i: combine_access_chains.cpp.i + +.PHONY : combine_access_chains.i + +# target to preprocess a source file +combine_access_chains.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.i +.PHONY : combine_access_chains.cpp.i + +combine_access_chains.s: combine_access_chains.cpp.s + +.PHONY : combine_access_chains.s + +# target to generate assembly for a file +combine_access_chains.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/combine_access_chains.cpp.s +.PHONY : combine_access_chains.cpp.s + +common_uniform_elim_pass.o: common_uniform_elim_pass.cpp.o + +.PHONY : common_uniform_elim_pass.o + +# target to build an object file +common_uniform_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.o +.PHONY : common_uniform_elim_pass.cpp.o + +common_uniform_elim_pass.i: common_uniform_elim_pass.cpp.i + +.PHONY : common_uniform_elim_pass.i + +# target to preprocess a source file +common_uniform_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.i +.PHONY : common_uniform_elim_pass.cpp.i + +common_uniform_elim_pass.s: common_uniform_elim_pass.cpp.s + +.PHONY : common_uniform_elim_pass.s + +# target to generate assembly for a file +common_uniform_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/common_uniform_elim_pass.cpp.s +.PHONY : common_uniform_elim_pass.cpp.s + +compact_ids_pass.o: compact_ids_pass.cpp.o + +.PHONY : compact_ids_pass.o + +# target to build an object file +compact_ids_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.o +.PHONY : compact_ids_pass.cpp.o + +compact_ids_pass.i: compact_ids_pass.cpp.i + +.PHONY : compact_ids_pass.i + +# target to preprocess a source file +compact_ids_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.i +.PHONY : compact_ids_pass.cpp.i + +compact_ids_pass.s: compact_ids_pass.cpp.s + +.PHONY : compact_ids_pass.s + +# target to generate assembly for a file +compact_ids_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/compact_ids_pass.cpp.s +.PHONY : compact_ids_pass.cpp.s + +composite.o: composite.cpp.o + +.PHONY : composite.o + +# target to build an object file +composite.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.o +.PHONY : composite.cpp.o + +composite.i: composite.cpp.i + +.PHONY : composite.i + +# target to preprocess a source file +composite.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.i +.PHONY : composite.cpp.i + +composite.s: composite.cpp.s + +.PHONY : composite.s + +# target to generate assembly for a file +composite.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/composite.cpp.s +.PHONY : composite.cpp.s + +const_folding_rules.o: const_folding_rules.cpp.o + +.PHONY : const_folding_rules.o + +# target to build an object file +const_folding_rules.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.o +.PHONY : const_folding_rules.cpp.o + +const_folding_rules.i: const_folding_rules.cpp.i + +.PHONY : const_folding_rules.i + +# target to preprocess a source file +const_folding_rules.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.i +.PHONY : const_folding_rules.cpp.i + +const_folding_rules.s: const_folding_rules.cpp.s + +.PHONY : const_folding_rules.s + +# target to generate assembly for a file +const_folding_rules.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/const_folding_rules.cpp.s +.PHONY : const_folding_rules.cpp.s + +constants.o: constants.cpp.o + +.PHONY : constants.o + +# target to build an object file +constants.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.o +.PHONY : constants.cpp.o + +constants.i: constants.cpp.i + +.PHONY : constants.i + +# target to preprocess a source file +constants.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.i +.PHONY : constants.cpp.i + +constants.s: constants.cpp.s + +.PHONY : constants.s + +# target to generate assembly for a file +constants.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/constants.cpp.s +.PHONY : constants.cpp.s + +copy_prop_arrays.o: copy_prop_arrays.cpp.o + +.PHONY : copy_prop_arrays.o + +# target to build an object file +copy_prop_arrays.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.o +.PHONY : copy_prop_arrays.cpp.o + +copy_prop_arrays.i: copy_prop_arrays.cpp.i + +.PHONY : copy_prop_arrays.i + +# target to preprocess a source file +copy_prop_arrays.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.i +.PHONY : copy_prop_arrays.cpp.i + +copy_prop_arrays.s: copy_prop_arrays.cpp.s + +.PHONY : copy_prop_arrays.s + +# target to generate assembly for a file +copy_prop_arrays.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/copy_prop_arrays.cpp.s +.PHONY : copy_prop_arrays.cpp.s + +dead_branch_elim_pass.o: dead_branch_elim_pass.cpp.o + +.PHONY : dead_branch_elim_pass.o + +# target to build an object file +dead_branch_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.o +.PHONY : dead_branch_elim_pass.cpp.o + +dead_branch_elim_pass.i: dead_branch_elim_pass.cpp.i + +.PHONY : dead_branch_elim_pass.i + +# target to preprocess a source file +dead_branch_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.i +.PHONY : dead_branch_elim_pass.cpp.i + +dead_branch_elim_pass.s: dead_branch_elim_pass.cpp.s + +.PHONY : dead_branch_elim_pass.s + +# target to generate assembly for a file +dead_branch_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_branch_elim_pass.cpp.s +.PHONY : dead_branch_elim_pass.cpp.s + +dead_insert_elim_pass.o: dead_insert_elim_pass.cpp.o + +.PHONY : dead_insert_elim_pass.o + +# target to build an object file +dead_insert_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.o +.PHONY : dead_insert_elim_pass.cpp.o + +dead_insert_elim_pass.i: dead_insert_elim_pass.cpp.i + +.PHONY : dead_insert_elim_pass.i + +# target to preprocess a source file +dead_insert_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.i +.PHONY : dead_insert_elim_pass.cpp.i + +dead_insert_elim_pass.s: dead_insert_elim_pass.cpp.s + +.PHONY : dead_insert_elim_pass.s + +# target to generate assembly for a file +dead_insert_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_insert_elim_pass.cpp.s +.PHONY : dead_insert_elim_pass.cpp.s + +dead_variable_elimination.o: dead_variable_elimination.cpp.o + +.PHONY : dead_variable_elimination.o + +# target to build an object file +dead_variable_elimination.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.o +.PHONY : dead_variable_elimination.cpp.o + +dead_variable_elimination.i: dead_variable_elimination.cpp.i + +.PHONY : dead_variable_elimination.i + +# target to preprocess a source file +dead_variable_elimination.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.i +.PHONY : dead_variable_elimination.cpp.i + +dead_variable_elimination.s: dead_variable_elimination.cpp.s + +.PHONY : dead_variable_elimination.s + +# target to generate assembly for a file +dead_variable_elimination.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dead_variable_elimination.cpp.s +.PHONY : dead_variable_elimination.cpp.s + +decoration_manager.o: decoration_manager.cpp.o + +.PHONY : decoration_manager.o + +# target to build an object file +decoration_manager.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.o +.PHONY : decoration_manager.cpp.o + +decoration_manager.i: decoration_manager.cpp.i + +.PHONY : decoration_manager.i + +# target to preprocess a source file +decoration_manager.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.i +.PHONY : decoration_manager.cpp.i + +decoration_manager.s: decoration_manager.cpp.s + +.PHONY : decoration_manager.s + +# target to generate assembly for a file +decoration_manager.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/decoration_manager.cpp.s +.PHONY : decoration_manager.cpp.s + +def_use_manager.o: def_use_manager.cpp.o + +.PHONY : def_use_manager.o + +# target to build an object file +def_use_manager.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.o +.PHONY : def_use_manager.cpp.o + +def_use_manager.i: def_use_manager.cpp.i + +.PHONY : def_use_manager.i + +# target to preprocess a source file +def_use_manager.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.i +.PHONY : def_use_manager.cpp.i + +def_use_manager.s: def_use_manager.cpp.s + +.PHONY : def_use_manager.s + +# target to generate assembly for a file +def_use_manager.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/def_use_manager.cpp.s +.PHONY : def_use_manager.cpp.s + +dominator_analysis.o: dominator_analysis.cpp.o + +.PHONY : dominator_analysis.o + +# target to build an object file +dominator_analysis.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.o +.PHONY : dominator_analysis.cpp.o + +dominator_analysis.i: dominator_analysis.cpp.i + +.PHONY : dominator_analysis.i + +# target to preprocess a source file +dominator_analysis.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.i +.PHONY : dominator_analysis.cpp.i + +dominator_analysis.s: dominator_analysis.cpp.s + +.PHONY : dominator_analysis.s + +# target to generate assembly for a file +dominator_analysis.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_analysis.cpp.s +.PHONY : dominator_analysis.cpp.s + +dominator_tree.o: dominator_tree.cpp.o + +.PHONY : dominator_tree.o + +# target to build an object file +dominator_tree.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.o +.PHONY : dominator_tree.cpp.o + +dominator_tree.i: dominator_tree.cpp.i + +.PHONY : dominator_tree.i + +# target to preprocess a source file +dominator_tree.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.i +.PHONY : dominator_tree.cpp.i + +dominator_tree.s: dominator_tree.cpp.s + +.PHONY : dominator_tree.s + +# target to generate assembly for a file +dominator_tree.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/dominator_tree.cpp.s +.PHONY : dominator_tree.cpp.s + +eliminate_dead_constant_pass.o: eliminate_dead_constant_pass.cpp.o + +.PHONY : eliminate_dead_constant_pass.o + +# target to build an object file +eliminate_dead_constant_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.o +.PHONY : eliminate_dead_constant_pass.cpp.o + +eliminate_dead_constant_pass.i: eliminate_dead_constant_pass.cpp.i + +.PHONY : eliminate_dead_constant_pass.i + +# target to preprocess a source file +eliminate_dead_constant_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.i +.PHONY : eliminate_dead_constant_pass.cpp.i + +eliminate_dead_constant_pass.s: eliminate_dead_constant_pass.cpp.s + +.PHONY : eliminate_dead_constant_pass.s + +# target to generate assembly for a file +eliminate_dead_constant_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_constant_pass.cpp.s +.PHONY : eliminate_dead_constant_pass.cpp.s + +eliminate_dead_functions_pass.o: eliminate_dead_functions_pass.cpp.o + +.PHONY : eliminate_dead_functions_pass.o + +# target to build an object file +eliminate_dead_functions_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.o +.PHONY : eliminate_dead_functions_pass.cpp.o + +eliminate_dead_functions_pass.i: eliminate_dead_functions_pass.cpp.i + +.PHONY : eliminate_dead_functions_pass.i + +# target to preprocess a source file +eliminate_dead_functions_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.i +.PHONY : eliminate_dead_functions_pass.cpp.i + +eliminate_dead_functions_pass.s: eliminate_dead_functions_pass.cpp.s + +.PHONY : eliminate_dead_functions_pass.s + +# target to generate assembly for a file +eliminate_dead_functions_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/eliminate_dead_functions_pass.cpp.s +.PHONY : eliminate_dead_functions_pass.cpp.s + +feature_manager.o: feature_manager.cpp.o + +.PHONY : feature_manager.o + +# target to build an object file +feature_manager.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.o +.PHONY : feature_manager.cpp.o + +feature_manager.i: feature_manager.cpp.i + +.PHONY : feature_manager.i + +# target to preprocess a source file +feature_manager.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.i +.PHONY : feature_manager.cpp.i + +feature_manager.s: feature_manager.cpp.s + +.PHONY : feature_manager.s + +# target to generate assembly for a file +feature_manager.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/feature_manager.cpp.s +.PHONY : feature_manager.cpp.s + +flatten_decoration_pass.o: flatten_decoration_pass.cpp.o + +.PHONY : flatten_decoration_pass.o + +# target to build an object file +flatten_decoration_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.o +.PHONY : flatten_decoration_pass.cpp.o + +flatten_decoration_pass.i: flatten_decoration_pass.cpp.i + +.PHONY : flatten_decoration_pass.i + +# target to preprocess a source file +flatten_decoration_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.i +.PHONY : flatten_decoration_pass.cpp.i + +flatten_decoration_pass.s: flatten_decoration_pass.cpp.s + +.PHONY : flatten_decoration_pass.s + +# target to generate assembly for a file +flatten_decoration_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/flatten_decoration_pass.cpp.s +.PHONY : flatten_decoration_pass.cpp.s + +fold.o: fold.cpp.o + +.PHONY : fold.o + +# target to build an object file +fold.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.o +.PHONY : fold.cpp.o + +fold.i: fold.cpp.i + +.PHONY : fold.i + +# target to preprocess a source file +fold.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.i +.PHONY : fold.cpp.i + +fold.s: fold.cpp.s + +.PHONY : fold.s + +# target to generate assembly for a file +fold.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold.cpp.s +.PHONY : fold.cpp.s + +fold_spec_constant_op_and_composite_pass.o: fold_spec_constant_op_and_composite_pass.cpp.o + +.PHONY : fold_spec_constant_op_and_composite_pass.o + +# target to build an object file +fold_spec_constant_op_and_composite_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.o +.PHONY : fold_spec_constant_op_and_composite_pass.cpp.o + +fold_spec_constant_op_and_composite_pass.i: fold_spec_constant_op_and_composite_pass.cpp.i + +.PHONY : fold_spec_constant_op_and_composite_pass.i + +# target to preprocess a source file +fold_spec_constant_op_and_composite_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.i +.PHONY : fold_spec_constant_op_and_composite_pass.cpp.i + +fold_spec_constant_op_and_composite_pass.s: fold_spec_constant_op_and_composite_pass.cpp.s + +.PHONY : fold_spec_constant_op_and_composite_pass.s + +# target to generate assembly for a file +fold_spec_constant_op_and_composite_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/fold_spec_constant_op_and_composite_pass.cpp.s +.PHONY : fold_spec_constant_op_and_composite_pass.cpp.s + +folding_rules.o: folding_rules.cpp.o + +.PHONY : folding_rules.o + +# target to build an object file +folding_rules.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.o +.PHONY : folding_rules.cpp.o + +folding_rules.i: folding_rules.cpp.i + +.PHONY : folding_rules.i + +# target to preprocess a source file +folding_rules.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.i +.PHONY : folding_rules.cpp.i + +folding_rules.s: folding_rules.cpp.s + +.PHONY : folding_rules.s + +# target to generate assembly for a file +folding_rules.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/folding_rules.cpp.s +.PHONY : folding_rules.cpp.s + +freeze_spec_constant_value_pass.o: freeze_spec_constant_value_pass.cpp.o + +.PHONY : freeze_spec_constant_value_pass.o + +# target to build an object file +freeze_spec_constant_value_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.o +.PHONY : freeze_spec_constant_value_pass.cpp.o + +freeze_spec_constant_value_pass.i: freeze_spec_constant_value_pass.cpp.i + +.PHONY : freeze_spec_constant_value_pass.i + +# target to preprocess a source file +freeze_spec_constant_value_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.i +.PHONY : freeze_spec_constant_value_pass.cpp.i + +freeze_spec_constant_value_pass.s: freeze_spec_constant_value_pass.cpp.s + +.PHONY : freeze_spec_constant_value_pass.s + +# target to generate assembly for a file +freeze_spec_constant_value_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/freeze_spec_constant_value_pass.cpp.s +.PHONY : freeze_spec_constant_value_pass.cpp.s + +function.o: function.cpp.o + +.PHONY : function.o + +# target to build an object file +function.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.o +.PHONY : function.cpp.o + +function.i: function.cpp.i + +.PHONY : function.i + +# target to preprocess a source file +function.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.i +.PHONY : function.cpp.i + +function.s: function.cpp.s + +.PHONY : function.s + +# target to generate assembly for a file +function.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/function.cpp.s +.PHONY : function.cpp.s + +if_conversion.o: if_conversion.cpp.o + +.PHONY : if_conversion.o + +# target to build an object file +if_conversion.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.o +.PHONY : if_conversion.cpp.o + +if_conversion.i: if_conversion.cpp.i + +.PHONY : if_conversion.i + +# target to preprocess a source file +if_conversion.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.i +.PHONY : if_conversion.cpp.i + +if_conversion.s: if_conversion.cpp.s + +.PHONY : if_conversion.s + +# target to generate assembly for a file +if_conversion.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/if_conversion.cpp.s +.PHONY : if_conversion.cpp.s + +inline_exhaustive_pass.o: inline_exhaustive_pass.cpp.o + +.PHONY : inline_exhaustive_pass.o + +# target to build an object file +inline_exhaustive_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.o +.PHONY : inline_exhaustive_pass.cpp.o + +inline_exhaustive_pass.i: inline_exhaustive_pass.cpp.i + +.PHONY : inline_exhaustive_pass.i + +# target to preprocess a source file +inline_exhaustive_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.i +.PHONY : inline_exhaustive_pass.cpp.i + +inline_exhaustive_pass.s: inline_exhaustive_pass.cpp.s + +.PHONY : inline_exhaustive_pass.s + +# target to generate assembly for a file +inline_exhaustive_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_exhaustive_pass.cpp.s +.PHONY : inline_exhaustive_pass.cpp.s + +inline_opaque_pass.o: inline_opaque_pass.cpp.o + +.PHONY : inline_opaque_pass.o + +# target to build an object file +inline_opaque_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.o +.PHONY : inline_opaque_pass.cpp.o + +inline_opaque_pass.i: inline_opaque_pass.cpp.i + +.PHONY : inline_opaque_pass.i + +# target to preprocess a source file +inline_opaque_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.i +.PHONY : inline_opaque_pass.cpp.i + +inline_opaque_pass.s: inline_opaque_pass.cpp.s + +.PHONY : inline_opaque_pass.s + +# target to generate assembly for a file +inline_opaque_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_opaque_pass.cpp.s +.PHONY : inline_opaque_pass.cpp.s + +inline_pass.o: inline_pass.cpp.o + +.PHONY : inline_pass.o + +# target to build an object file +inline_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.o +.PHONY : inline_pass.cpp.o + +inline_pass.i: inline_pass.cpp.i + +.PHONY : inline_pass.i + +# target to preprocess a source file +inline_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.i +.PHONY : inline_pass.cpp.i + +inline_pass.s: inline_pass.cpp.s + +.PHONY : inline_pass.s + +# target to generate assembly for a file +inline_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/inline_pass.cpp.s +.PHONY : inline_pass.cpp.s + +instruction.o: instruction.cpp.o + +.PHONY : instruction.o + +# target to build an object file +instruction.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.o +.PHONY : instruction.cpp.o + +instruction.i: instruction.cpp.i + +.PHONY : instruction.i + +# target to preprocess a source file +instruction.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.i +.PHONY : instruction.cpp.i + +instruction.s: instruction.cpp.s + +.PHONY : instruction.s + +# target to generate assembly for a file +instruction.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction.cpp.s +.PHONY : instruction.cpp.s + +instruction_list.o: instruction_list.cpp.o + +.PHONY : instruction_list.o + +# target to build an object file +instruction_list.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.o +.PHONY : instruction_list.cpp.o + +instruction_list.i: instruction_list.cpp.i + +.PHONY : instruction_list.i + +# target to preprocess a source file +instruction_list.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.i +.PHONY : instruction_list.cpp.i + +instruction_list.s: instruction_list.cpp.s + +.PHONY : instruction_list.s + +# target to generate assembly for a file +instruction_list.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/instruction_list.cpp.s +.PHONY : instruction_list.cpp.s + +ir_context.o: ir_context.cpp.o + +.PHONY : ir_context.o + +# target to build an object file +ir_context.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.o +.PHONY : ir_context.cpp.o + +ir_context.i: ir_context.cpp.i + +.PHONY : ir_context.i + +# target to preprocess a source file +ir_context.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.i +.PHONY : ir_context.cpp.i + +ir_context.s: ir_context.cpp.s + +.PHONY : ir_context.s + +# target to generate assembly for a file +ir_context.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_context.cpp.s +.PHONY : ir_context.cpp.s + +ir_loader.o: ir_loader.cpp.o + +.PHONY : ir_loader.o + +# target to build an object file +ir_loader.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.o +.PHONY : ir_loader.cpp.o + +ir_loader.i: ir_loader.cpp.i + +.PHONY : ir_loader.i + +# target to preprocess a source file +ir_loader.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.i +.PHONY : ir_loader.cpp.i + +ir_loader.s: ir_loader.cpp.s + +.PHONY : ir_loader.s + +# target to generate assembly for a file +ir_loader.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ir_loader.cpp.s +.PHONY : ir_loader.cpp.s + +licm_pass.o: licm_pass.cpp.o + +.PHONY : licm_pass.o + +# target to build an object file +licm_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.o +.PHONY : licm_pass.cpp.o + +licm_pass.i: licm_pass.cpp.i + +.PHONY : licm_pass.i + +# target to preprocess a source file +licm_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.i +.PHONY : licm_pass.cpp.i + +licm_pass.s: licm_pass.cpp.s + +.PHONY : licm_pass.s + +# target to generate assembly for a file +licm_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/licm_pass.cpp.s +.PHONY : licm_pass.cpp.s + +local_access_chain_convert_pass.o: local_access_chain_convert_pass.cpp.o + +.PHONY : local_access_chain_convert_pass.o + +# target to build an object file +local_access_chain_convert_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.o +.PHONY : local_access_chain_convert_pass.cpp.o + +local_access_chain_convert_pass.i: local_access_chain_convert_pass.cpp.i + +.PHONY : local_access_chain_convert_pass.i + +# target to preprocess a source file +local_access_chain_convert_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.i +.PHONY : local_access_chain_convert_pass.cpp.i + +local_access_chain_convert_pass.s: local_access_chain_convert_pass.cpp.s + +.PHONY : local_access_chain_convert_pass.s + +# target to generate assembly for a file +local_access_chain_convert_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_access_chain_convert_pass.cpp.s +.PHONY : local_access_chain_convert_pass.cpp.s + +local_redundancy_elimination.o: local_redundancy_elimination.cpp.o + +.PHONY : local_redundancy_elimination.o + +# target to build an object file +local_redundancy_elimination.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.o +.PHONY : local_redundancy_elimination.cpp.o + +local_redundancy_elimination.i: local_redundancy_elimination.cpp.i + +.PHONY : local_redundancy_elimination.i + +# target to preprocess a source file +local_redundancy_elimination.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.i +.PHONY : local_redundancy_elimination.cpp.i + +local_redundancy_elimination.s: local_redundancy_elimination.cpp.s + +.PHONY : local_redundancy_elimination.s + +# target to generate assembly for a file +local_redundancy_elimination.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_redundancy_elimination.cpp.s +.PHONY : local_redundancy_elimination.cpp.s + +local_single_block_elim_pass.o: local_single_block_elim_pass.cpp.o + +.PHONY : local_single_block_elim_pass.o + +# target to build an object file +local_single_block_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.o +.PHONY : local_single_block_elim_pass.cpp.o + +local_single_block_elim_pass.i: local_single_block_elim_pass.cpp.i + +.PHONY : local_single_block_elim_pass.i + +# target to preprocess a source file +local_single_block_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.i +.PHONY : local_single_block_elim_pass.cpp.i + +local_single_block_elim_pass.s: local_single_block_elim_pass.cpp.s + +.PHONY : local_single_block_elim_pass.s + +# target to generate assembly for a file +local_single_block_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_block_elim_pass.cpp.s +.PHONY : local_single_block_elim_pass.cpp.s + +local_single_store_elim_pass.o: local_single_store_elim_pass.cpp.o + +.PHONY : local_single_store_elim_pass.o + +# target to build an object file +local_single_store_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.o +.PHONY : local_single_store_elim_pass.cpp.o + +local_single_store_elim_pass.i: local_single_store_elim_pass.cpp.i + +.PHONY : local_single_store_elim_pass.i + +# target to preprocess a source file +local_single_store_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.i +.PHONY : local_single_store_elim_pass.cpp.i + +local_single_store_elim_pass.s: local_single_store_elim_pass.cpp.s + +.PHONY : local_single_store_elim_pass.s + +# target to generate assembly for a file +local_single_store_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_single_store_elim_pass.cpp.s +.PHONY : local_single_store_elim_pass.cpp.s + +local_ssa_elim_pass.o: local_ssa_elim_pass.cpp.o + +.PHONY : local_ssa_elim_pass.o + +# target to build an object file +local_ssa_elim_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.o +.PHONY : local_ssa_elim_pass.cpp.o + +local_ssa_elim_pass.i: local_ssa_elim_pass.cpp.i + +.PHONY : local_ssa_elim_pass.i + +# target to preprocess a source file +local_ssa_elim_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.i +.PHONY : local_ssa_elim_pass.cpp.i + +local_ssa_elim_pass.s: local_ssa_elim_pass.cpp.s + +.PHONY : local_ssa_elim_pass.s + +# target to generate assembly for a file +local_ssa_elim_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/local_ssa_elim_pass.cpp.s +.PHONY : local_ssa_elim_pass.cpp.s + +loop_dependence.o: loop_dependence.cpp.o + +.PHONY : loop_dependence.o + +# target to build an object file +loop_dependence.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.o +.PHONY : loop_dependence.cpp.o + +loop_dependence.i: loop_dependence.cpp.i + +.PHONY : loop_dependence.i + +# target to preprocess a source file +loop_dependence.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.i +.PHONY : loop_dependence.cpp.i + +loop_dependence.s: loop_dependence.cpp.s + +.PHONY : loop_dependence.s + +# target to generate assembly for a file +loop_dependence.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence.cpp.s +.PHONY : loop_dependence.cpp.s + +loop_dependence_helpers.o: loop_dependence_helpers.cpp.o + +.PHONY : loop_dependence_helpers.o + +# target to build an object file +loop_dependence_helpers.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.o +.PHONY : loop_dependence_helpers.cpp.o + +loop_dependence_helpers.i: loop_dependence_helpers.cpp.i + +.PHONY : loop_dependence_helpers.i + +# target to preprocess a source file +loop_dependence_helpers.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.i +.PHONY : loop_dependence_helpers.cpp.i + +loop_dependence_helpers.s: loop_dependence_helpers.cpp.s + +.PHONY : loop_dependence_helpers.s + +# target to generate assembly for a file +loop_dependence_helpers.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_dependence_helpers.cpp.s +.PHONY : loop_dependence_helpers.cpp.s + +loop_descriptor.o: loop_descriptor.cpp.o + +.PHONY : loop_descriptor.o + +# target to build an object file +loop_descriptor.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.o +.PHONY : loop_descriptor.cpp.o + +loop_descriptor.i: loop_descriptor.cpp.i + +.PHONY : loop_descriptor.i + +# target to preprocess a source file +loop_descriptor.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.i +.PHONY : loop_descriptor.cpp.i + +loop_descriptor.s: loop_descriptor.cpp.s + +.PHONY : loop_descriptor.s + +# target to generate assembly for a file +loop_descriptor.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_descriptor.cpp.s +.PHONY : loop_descriptor.cpp.s + +loop_fission.o: loop_fission.cpp.o + +.PHONY : loop_fission.o + +# target to build an object file +loop_fission.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.o +.PHONY : loop_fission.cpp.o + +loop_fission.i: loop_fission.cpp.i + +.PHONY : loop_fission.i + +# target to preprocess a source file +loop_fission.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.i +.PHONY : loop_fission.cpp.i + +loop_fission.s: loop_fission.cpp.s + +.PHONY : loop_fission.s + +# target to generate assembly for a file +loop_fission.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fission.cpp.s +.PHONY : loop_fission.cpp.s + +loop_fusion.o: loop_fusion.cpp.o + +.PHONY : loop_fusion.o + +# target to build an object file +loop_fusion.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.o +.PHONY : loop_fusion.cpp.o + +loop_fusion.i: loop_fusion.cpp.i + +.PHONY : loop_fusion.i + +# target to preprocess a source file +loop_fusion.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.i +.PHONY : loop_fusion.cpp.i + +loop_fusion.s: loop_fusion.cpp.s + +.PHONY : loop_fusion.s + +# target to generate assembly for a file +loop_fusion.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion.cpp.s +.PHONY : loop_fusion.cpp.s + +loop_fusion_pass.o: loop_fusion_pass.cpp.o + +.PHONY : loop_fusion_pass.o + +# target to build an object file +loop_fusion_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.o +.PHONY : loop_fusion_pass.cpp.o + +loop_fusion_pass.i: loop_fusion_pass.cpp.i + +.PHONY : loop_fusion_pass.i + +# target to preprocess a source file +loop_fusion_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.i +.PHONY : loop_fusion_pass.cpp.i + +loop_fusion_pass.s: loop_fusion_pass.cpp.s + +.PHONY : loop_fusion_pass.s + +# target to generate assembly for a file +loop_fusion_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_fusion_pass.cpp.s +.PHONY : loop_fusion_pass.cpp.s + +loop_peeling.o: loop_peeling.cpp.o + +.PHONY : loop_peeling.o + +# target to build an object file +loop_peeling.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.o +.PHONY : loop_peeling.cpp.o + +loop_peeling.i: loop_peeling.cpp.i + +.PHONY : loop_peeling.i + +# target to preprocess a source file +loop_peeling.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.i +.PHONY : loop_peeling.cpp.i + +loop_peeling.s: loop_peeling.cpp.s + +.PHONY : loop_peeling.s + +# target to generate assembly for a file +loop_peeling.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_peeling.cpp.s +.PHONY : loop_peeling.cpp.s + +loop_unroller.o: loop_unroller.cpp.o + +.PHONY : loop_unroller.o + +# target to build an object file +loop_unroller.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.o +.PHONY : loop_unroller.cpp.o + +loop_unroller.i: loop_unroller.cpp.i + +.PHONY : loop_unroller.i + +# target to preprocess a source file +loop_unroller.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.i +.PHONY : loop_unroller.cpp.i + +loop_unroller.s: loop_unroller.cpp.s + +.PHONY : loop_unroller.s + +# target to generate assembly for a file +loop_unroller.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unroller.cpp.s +.PHONY : loop_unroller.cpp.s + +loop_unswitch_pass.o: loop_unswitch_pass.cpp.o + +.PHONY : loop_unswitch_pass.o + +# target to build an object file +loop_unswitch_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.o +.PHONY : loop_unswitch_pass.cpp.o + +loop_unswitch_pass.i: loop_unswitch_pass.cpp.i + +.PHONY : loop_unswitch_pass.i + +# target to preprocess a source file +loop_unswitch_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.i +.PHONY : loop_unswitch_pass.cpp.i + +loop_unswitch_pass.s: loop_unswitch_pass.cpp.s + +.PHONY : loop_unswitch_pass.s + +# target to generate assembly for a file +loop_unswitch_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_unswitch_pass.cpp.s +.PHONY : loop_unswitch_pass.cpp.s + +loop_utils.o: loop_utils.cpp.o + +.PHONY : loop_utils.o + +# target to build an object file +loop_utils.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.o +.PHONY : loop_utils.cpp.o + +loop_utils.i: loop_utils.cpp.i + +.PHONY : loop_utils.i + +# target to preprocess a source file +loop_utils.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.i +.PHONY : loop_utils.cpp.i + +loop_utils.s: loop_utils.cpp.s + +.PHONY : loop_utils.s + +# target to generate assembly for a file +loop_utils.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/loop_utils.cpp.s +.PHONY : loop_utils.cpp.s + +mem_pass.o: mem_pass.cpp.o + +.PHONY : mem_pass.o + +# target to build an object file +mem_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.o +.PHONY : mem_pass.cpp.o + +mem_pass.i: mem_pass.cpp.i + +.PHONY : mem_pass.i + +# target to preprocess a source file +mem_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.i +.PHONY : mem_pass.cpp.i + +mem_pass.s: mem_pass.cpp.s + +.PHONY : mem_pass.s + +# target to generate assembly for a file +mem_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/mem_pass.cpp.s +.PHONY : mem_pass.cpp.s + +merge_return_pass.o: merge_return_pass.cpp.o + +.PHONY : merge_return_pass.o + +# target to build an object file +merge_return_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.o +.PHONY : merge_return_pass.cpp.o + +merge_return_pass.i: merge_return_pass.cpp.i + +.PHONY : merge_return_pass.i + +# target to preprocess a source file +merge_return_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.i +.PHONY : merge_return_pass.cpp.i + +merge_return_pass.s: merge_return_pass.cpp.s + +.PHONY : merge_return_pass.s + +# target to generate assembly for a file +merge_return_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/merge_return_pass.cpp.s +.PHONY : merge_return_pass.cpp.s + +module.o: module.cpp.o + +.PHONY : module.o + +# target to build an object file +module.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.o +.PHONY : module.cpp.o + +module.i: module.cpp.i + +.PHONY : module.i + +# target to preprocess a source file +module.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.i +.PHONY : module.cpp.i + +module.s: module.cpp.s + +.PHONY : module.s + +# target to generate assembly for a file +module.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/module.cpp.s +.PHONY : module.cpp.s + +optimizer.o: optimizer.cpp.o + +.PHONY : optimizer.o + +# target to build an object file +optimizer.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.o +.PHONY : optimizer.cpp.o + +optimizer.i: optimizer.cpp.i + +.PHONY : optimizer.i + +# target to preprocess a source file +optimizer.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.i +.PHONY : optimizer.cpp.i + +optimizer.s: optimizer.cpp.s + +.PHONY : optimizer.s + +# target to generate assembly for a file +optimizer.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/optimizer.cpp.s +.PHONY : optimizer.cpp.s + +pass.o: pass.cpp.o + +.PHONY : pass.o + +# target to build an object file +pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.o +.PHONY : pass.cpp.o + +pass.i: pass.cpp.i + +.PHONY : pass.i + +# target to preprocess a source file +pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.i +.PHONY : pass.cpp.i + +pass.s: pass.cpp.s + +.PHONY : pass.s + +# target to generate assembly for a file +pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass.cpp.s +.PHONY : pass.cpp.s + +pass_manager.o: pass_manager.cpp.o + +.PHONY : pass_manager.o + +# target to build an object file +pass_manager.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.o +.PHONY : pass_manager.cpp.o + +pass_manager.i: pass_manager.cpp.i + +.PHONY : pass_manager.i + +# target to preprocess a source file +pass_manager.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.i +.PHONY : pass_manager.cpp.i + +pass_manager.s: pass_manager.cpp.s + +.PHONY : pass_manager.s + +# target to generate assembly for a file +pass_manager.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/pass_manager.cpp.s +.PHONY : pass_manager.cpp.s + +private_to_local_pass.o: private_to_local_pass.cpp.o + +.PHONY : private_to_local_pass.o + +# target to build an object file +private_to_local_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.o +.PHONY : private_to_local_pass.cpp.o + +private_to_local_pass.i: private_to_local_pass.cpp.i + +.PHONY : private_to_local_pass.i + +# target to preprocess a source file +private_to_local_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.i +.PHONY : private_to_local_pass.cpp.i + +private_to_local_pass.s: private_to_local_pass.cpp.s + +.PHONY : private_to_local_pass.s + +# target to generate assembly for a file +private_to_local_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/private_to_local_pass.cpp.s +.PHONY : private_to_local_pass.cpp.s + +propagator.o: propagator.cpp.o + +.PHONY : propagator.o + +# target to build an object file +propagator.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.o +.PHONY : propagator.cpp.o + +propagator.i: propagator.cpp.i + +.PHONY : propagator.i + +# target to preprocess a source file +propagator.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.i +.PHONY : propagator.cpp.i + +propagator.s: propagator.cpp.s + +.PHONY : propagator.s + +# target to generate assembly for a file +propagator.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/propagator.cpp.s +.PHONY : propagator.cpp.s + +reduce_load_size.o: reduce_load_size.cpp.o + +.PHONY : reduce_load_size.o + +# target to build an object file +reduce_load_size.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.o +.PHONY : reduce_load_size.cpp.o + +reduce_load_size.i: reduce_load_size.cpp.i + +.PHONY : reduce_load_size.i + +# target to preprocess a source file +reduce_load_size.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.i +.PHONY : reduce_load_size.cpp.i + +reduce_load_size.s: reduce_load_size.cpp.s + +.PHONY : reduce_load_size.s + +# target to generate assembly for a file +reduce_load_size.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/reduce_load_size.cpp.s +.PHONY : reduce_load_size.cpp.s + +redundancy_elimination.o: redundancy_elimination.cpp.o + +.PHONY : redundancy_elimination.o + +# target to build an object file +redundancy_elimination.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.o +.PHONY : redundancy_elimination.cpp.o + +redundancy_elimination.i: redundancy_elimination.cpp.i + +.PHONY : redundancy_elimination.i + +# target to preprocess a source file +redundancy_elimination.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.i +.PHONY : redundancy_elimination.cpp.i + +redundancy_elimination.s: redundancy_elimination.cpp.s + +.PHONY : redundancy_elimination.s + +# target to generate assembly for a file +redundancy_elimination.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/redundancy_elimination.cpp.s +.PHONY : redundancy_elimination.cpp.s + +register_pressure.o: register_pressure.cpp.o + +.PHONY : register_pressure.o + +# target to build an object file +register_pressure.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.o +.PHONY : register_pressure.cpp.o + +register_pressure.i: register_pressure.cpp.i + +.PHONY : register_pressure.i + +# target to preprocess a source file +register_pressure.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.i +.PHONY : register_pressure.cpp.i + +register_pressure.s: register_pressure.cpp.s + +.PHONY : register_pressure.s + +# target to generate assembly for a file +register_pressure.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/register_pressure.cpp.s +.PHONY : register_pressure.cpp.s + +remove_duplicates_pass.o: remove_duplicates_pass.cpp.o + +.PHONY : remove_duplicates_pass.o + +# target to build an object file +remove_duplicates_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.o +.PHONY : remove_duplicates_pass.cpp.o + +remove_duplicates_pass.i: remove_duplicates_pass.cpp.i + +.PHONY : remove_duplicates_pass.i + +# target to preprocess a source file +remove_duplicates_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.i +.PHONY : remove_duplicates_pass.cpp.i + +remove_duplicates_pass.s: remove_duplicates_pass.cpp.s + +.PHONY : remove_duplicates_pass.s + +# target to generate assembly for a file +remove_duplicates_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/remove_duplicates_pass.cpp.s +.PHONY : remove_duplicates_pass.cpp.s + +replace_invalid_opc.o: replace_invalid_opc.cpp.o + +.PHONY : replace_invalid_opc.o + +# target to build an object file +replace_invalid_opc.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.o +.PHONY : replace_invalid_opc.cpp.o + +replace_invalid_opc.i: replace_invalid_opc.cpp.i + +.PHONY : replace_invalid_opc.i + +# target to preprocess a source file +replace_invalid_opc.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.i +.PHONY : replace_invalid_opc.cpp.i + +replace_invalid_opc.s: replace_invalid_opc.cpp.s + +.PHONY : replace_invalid_opc.s + +# target to generate assembly for a file +replace_invalid_opc.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/replace_invalid_opc.cpp.s +.PHONY : replace_invalid_opc.cpp.s + +scalar_analysis.o: scalar_analysis.cpp.o + +.PHONY : scalar_analysis.o + +# target to build an object file +scalar_analysis.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.o +.PHONY : scalar_analysis.cpp.o + +scalar_analysis.i: scalar_analysis.cpp.i + +.PHONY : scalar_analysis.i + +# target to preprocess a source file +scalar_analysis.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.i +.PHONY : scalar_analysis.cpp.i + +scalar_analysis.s: scalar_analysis.cpp.s + +.PHONY : scalar_analysis.s + +# target to generate assembly for a file +scalar_analysis.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis.cpp.s +.PHONY : scalar_analysis.cpp.s + +scalar_analysis_simplification.o: scalar_analysis_simplification.cpp.o + +.PHONY : scalar_analysis_simplification.o + +# target to build an object file +scalar_analysis_simplification.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.o +.PHONY : scalar_analysis_simplification.cpp.o + +scalar_analysis_simplification.i: scalar_analysis_simplification.cpp.i + +.PHONY : scalar_analysis_simplification.i + +# target to preprocess a source file +scalar_analysis_simplification.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.i +.PHONY : scalar_analysis_simplification.cpp.i + +scalar_analysis_simplification.s: scalar_analysis_simplification.cpp.s + +.PHONY : scalar_analysis_simplification.s + +# target to generate assembly for a file +scalar_analysis_simplification.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_analysis_simplification.cpp.s +.PHONY : scalar_analysis_simplification.cpp.s + +scalar_replacement_pass.o: scalar_replacement_pass.cpp.o + +.PHONY : scalar_replacement_pass.o + +# target to build an object file +scalar_replacement_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.o +.PHONY : scalar_replacement_pass.cpp.o + +scalar_replacement_pass.i: scalar_replacement_pass.cpp.i + +.PHONY : scalar_replacement_pass.i + +# target to preprocess a source file +scalar_replacement_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.i +.PHONY : scalar_replacement_pass.cpp.i + +scalar_replacement_pass.s: scalar_replacement_pass.cpp.s + +.PHONY : scalar_replacement_pass.s + +# target to generate assembly for a file +scalar_replacement_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/scalar_replacement_pass.cpp.s +.PHONY : scalar_replacement_pass.cpp.s + +set_spec_constant_default_value_pass.o: set_spec_constant_default_value_pass.cpp.o + +.PHONY : set_spec_constant_default_value_pass.o + +# target to build an object file +set_spec_constant_default_value_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.o +.PHONY : set_spec_constant_default_value_pass.cpp.o + +set_spec_constant_default_value_pass.i: set_spec_constant_default_value_pass.cpp.i + +.PHONY : set_spec_constant_default_value_pass.i + +# target to preprocess a source file +set_spec_constant_default_value_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.i +.PHONY : set_spec_constant_default_value_pass.cpp.i + +set_spec_constant_default_value_pass.s: set_spec_constant_default_value_pass.cpp.s + +.PHONY : set_spec_constant_default_value_pass.s + +# target to generate assembly for a file +set_spec_constant_default_value_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/set_spec_constant_default_value_pass.cpp.s +.PHONY : set_spec_constant_default_value_pass.cpp.s + +simplification_pass.o: simplification_pass.cpp.o + +.PHONY : simplification_pass.o + +# target to build an object file +simplification_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.o +.PHONY : simplification_pass.cpp.o + +simplification_pass.i: simplification_pass.cpp.i + +.PHONY : simplification_pass.i + +# target to preprocess a source file +simplification_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.i +.PHONY : simplification_pass.cpp.i + +simplification_pass.s: simplification_pass.cpp.s + +.PHONY : simplification_pass.s + +# target to generate assembly for a file +simplification_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/simplification_pass.cpp.s +.PHONY : simplification_pass.cpp.s + +ssa_rewrite_pass.o: ssa_rewrite_pass.cpp.o + +.PHONY : ssa_rewrite_pass.o + +# target to build an object file +ssa_rewrite_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.o +.PHONY : ssa_rewrite_pass.cpp.o + +ssa_rewrite_pass.i: ssa_rewrite_pass.cpp.i + +.PHONY : ssa_rewrite_pass.i + +# target to preprocess a source file +ssa_rewrite_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.i +.PHONY : ssa_rewrite_pass.cpp.i + +ssa_rewrite_pass.s: ssa_rewrite_pass.cpp.s + +.PHONY : ssa_rewrite_pass.s + +# target to generate assembly for a file +ssa_rewrite_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/ssa_rewrite_pass.cpp.s +.PHONY : ssa_rewrite_pass.cpp.s + +strength_reduction_pass.o: strength_reduction_pass.cpp.o + +.PHONY : strength_reduction_pass.o + +# target to build an object file +strength_reduction_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.o +.PHONY : strength_reduction_pass.cpp.o + +strength_reduction_pass.i: strength_reduction_pass.cpp.i + +.PHONY : strength_reduction_pass.i + +# target to preprocess a source file +strength_reduction_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.i +.PHONY : strength_reduction_pass.cpp.i + +strength_reduction_pass.s: strength_reduction_pass.cpp.s + +.PHONY : strength_reduction_pass.s + +# target to generate assembly for a file +strength_reduction_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strength_reduction_pass.cpp.s +.PHONY : strength_reduction_pass.cpp.s + +strip_debug_info_pass.o: strip_debug_info_pass.cpp.o + +.PHONY : strip_debug_info_pass.o + +# target to build an object file +strip_debug_info_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.o +.PHONY : strip_debug_info_pass.cpp.o + +strip_debug_info_pass.i: strip_debug_info_pass.cpp.i + +.PHONY : strip_debug_info_pass.i + +# target to preprocess a source file +strip_debug_info_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.i +.PHONY : strip_debug_info_pass.cpp.i + +strip_debug_info_pass.s: strip_debug_info_pass.cpp.s + +.PHONY : strip_debug_info_pass.s + +# target to generate assembly for a file +strip_debug_info_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_debug_info_pass.cpp.s +.PHONY : strip_debug_info_pass.cpp.s + +strip_reflect_info_pass.o: strip_reflect_info_pass.cpp.o + +.PHONY : strip_reflect_info_pass.o + +# target to build an object file +strip_reflect_info_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.o +.PHONY : strip_reflect_info_pass.cpp.o + +strip_reflect_info_pass.i: strip_reflect_info_pass.cpp.i + +.PHONY : strip_reflect_info_pass.i + +# target to preprocess a source file +strip_reflect_info_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.i +.PHONY : strip_reflect_info_pass.cpp.i + +strip_reflect_info_pass.s: strip_reflect_info_pass.cpp.s + +.PHONY : strip_reflect_info_pass.s + +# target to generate assembly for a file +strip_reflect_info_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/strip_reflect_info_pass.cpp.s +.PHONY : strip_reflect_info_pass.cpp.s + +struct_cfg_analysis.o: struct_cfg_analysis.cpp.o + +.PHONY : struct_cfg_analysis.o + +# target to build an object file +struct_cfg_analysis.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.o +.PHONY : struct_cfg_analysis.cpp.o + +struct_cfg_analysis.i: struct_cfg_analysis.cpp.i + +.PHONY : struct_cfg_analysis.i + +# target to preprocess a source file +struct_cfg_analysis.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.i +.PHONY : struct_cfg_analysis.cpp.i + +struct_cfg_analysis.s: struct_cfg_analysis.cpp.s + +.PHONY : struct_cfg_analysis.s + +# target to generate assembly for a file +struct_cfg_analysis.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/struct_cfg_analysis.cpp.s +.PHONY : struct_cfg_analysis.cpp.s + +type_manager.o: type_manager.cpp.o + +.PHONY : type_manager.o + +# target to build an object file +type_manager.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.o +.PHONY : type_manager.cpp.o + +type_manager.i: type_manager.cpp.i + +.PHONY : type_manager.i + +# target to preprocess a source file +type_manager.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.i +.PHONY : type_manager.cpp.i + +type_manager.s: type_manager.cpp.s + +.PHONY : type_manager.s + +# target to generate assembly for a file +type_manager.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/type_manager.cpp.s +.PHONY : type_manager.cpp.s + +types.o: types.cpp.o + +.PHONY : types.o + +# target to build an object file +types.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.o +.PHONY : types.cpp.o + +types.i: types.cpp.i + +.PHONY : types.i + +# target to preprocess a source file +types.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.i +.PHONY : types.cpp.i + +types.s: types.cpp.s + +.PHONY : types.s + +# target to generate assembly for a file +types.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/types.cpp.s +.PHONY : types.cpp.s + +unify_const_pass.o: unify_const_pass.cpp.o + +.PHONY : unify_const_pass.o + +# target to build an object file +unify_const_pass.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.o +.PHONY : unify_const_pass.cpp.o + +unify_const_pass.i: unify_const_pass.cpp.i + +.PHONY : unify_const_pass.i + +# target to preprocess a source file +unify_const_pass.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.i +.PHONY : unify_const_pass.cpp.i + +unify_const_pass.s: unify_const_pass.cpp.s + +.PHONY : unify_const_pass.s + +# target to generate assembly for a file +unify_const_pass.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/unify_const_pass.cpp.s +.PHONY : unify_const_pass.cpp.s + +value_number_table.o: value_number_table.cpp.o + +.PHONY : value_number_table.o + +# target to build an object file +value_number_table.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.o +.PHONY : value_number_table.cpp.o + +value_number_table.i: value_number_table.cpp.i + +.PHONY : value_number_table.i + +# target to preprocess a source file +value_number_table.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.i +.PHONY : value_number_table.cpp.i + +value_number_table.s: value_number_table.cpp.s + +.PHONY : value_number_table.s + +# target to generate assembly for a file +value_number_table.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/value_number_table.cpp.s +.PHONY : value_number_table.cpp.s + +vector_dce.o: vector_dce.cpp.o + +.PHONY : vector_dce.o + +# target to build an object file +vector_dce.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.o +.PHONY : vector_dce.cpp.o + +vector_dce.i: vector_dce.cpp.i + +.PHONY : vector_dce.i + +# target to preprocess a source file +vector_dce.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.i +.PHONY : vector_dce.cpp.i + +vector_dce.s: vector_dce.cpp.s + +.PHONY : vector_dce.s + +# target to generate assembly for a file +vector_dce.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/vector_dce.cpp.s +.PHONY : vector_dce.cpp.s + +workaround1209.o: workaround1209.cpp.o + +.PHONY : workaround1209.o + +# target to build an object file +workaround1209.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.o +.PHONY : workaround1209.cpp.o + +workaround1209.i: workaround1209.cpp.i + +.PHONY : workaround1209.i + +# target to preprocess a source file +workaround1209.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.i +.PHONY : workaround1209.cpp.i + +workaround1209.s: workaround1209.cpp.s + +.PHONY : workaround1209.s + +# target to generate assembly for a file +workaround1209.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f source/opt/CMakeFiles/SPIRV-Tools-opt.dir/build.make source/opt/CMakeFiles/SPIRV-Tools-opt.dir/workaround1209.cpp.s +.PHONY : workaround1209.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... rebuild_cache" + @echo "... install/strip" + @echo "... SPIRV-Tools-opt" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... edit_cache" + @echo "... aggressive_dead_code_elim_pass.o" + @echo "... aggressive_dead_code_elim_pass.i" + @echo "... aggressive_dead_code_elim_pass.s" + @echo "... basic_block.o" + @echo "... basic_block.i" + @echo "... basic_block.s" + @echo "... block_merge_pass.o" + @echo "... block_merge_pass.i" + @echo "... block_merge_pass.s" + @echo "... build_module.o" + @echo "... build_module.i" + @echo "... build_module.s" + @echo "... ccp_pass.o" + @echo "... ccp_pass.i" + @echo "... ccp_pass.s" + @echo "... cfg.o" + @echo "... cfg.i" + @echo "... cfg.s" + @echo "... cfg_cleanup_pass.o" + @echo "... cfg_cleanup_pass.i" + @echo "... cfg_cleanup_pass.s" + @echo "... combine_access_chains.o" + @echo "... combine_access_chains.i" + @echo "... combine_access_chains.s" + @echo "... common_uniform_elim_pass.o" + @echo "... common_uniform_elim_pass.i" + @echo "... common_uniform_elim_pass.s" + @echo "... compact_ids_pass.o" + @echo "... compact_ids_pass.i" + @echo "... compact_ids_pass.s" + @echo "... composite.o" + @echo "... composite.i" + @echo "... composite.s" + @echo "... const_folding_rules.o" + @echo "... const_folding_rules.i" + @echo "... const_folding_rules.s" + @echo "... constants.o" + @echo "... constants.i" + @echo "... constants.s" + @echo "... copy_prop_arrays.o" + @echo "... copy_prop_arrays.i" + @echo "... copy_prop_arrays.s" + @echo "... dead_branch_elim_pass.o" + @echo "... dead_branch_elim_pass.i" + @echo "... dead_branch_elim_pass.s" + @echo "... dead_insert_elim_pass.o" + @echo "... dead_insert_elim_pass.i" + @echo "... dead_insert_elim_pass.s" + @echo "... dead_variable_elimination.o" + @echo "... dead_variable_elimination.i" + @echo "... dead_variable_elimination.s" + @echo "... decoration_manager.o" + @echo "... decoration_manager.i" + @echo "... decoration_manager.s" + @echo "... def_use_manager.o" + @echo "... def_use_manager.i" + @echo "... def_use_manager.s" + @echo "... dominator_analysis.o" + @echo "... dominator_analysis.i" + @echo "... dominator_analysis.s" + @echo "... dominator_tree.o" + @echo "... dominator_tree.i" + @echo "... dominator_tree.s" + @echo "... eliminate_dead_constant_pass.o" + @echo "... eliminate_dead_constant_pass.i" + @echo "... eliminate_dead_constant_pass.s" + @echo "... eliminate_dead_functions_pass.o" + @echo "... eliminate_dead_functions_pass.i" + @echo "... eliminate_dead_functions_pass.s" + @echo "... feature_manager.o" + @echo "... feature_manager.i" + @echo "... feature_manager.s" + @echo "... flatten_decoration_pass.o" + @echo "... flatten_decoration_pass.i" + @echo "... flatten_decoration_pass.s" + @echo "... fold.o" + @echo "... fold.i" + @echo "... fold.s" + @echo "... fold_spec_constant_op_and_composite_pass.o" + @echo "... fold_spec_constant_op_and_composite_pass.i" + @echo "... fold_spec_constant_op_and_composite_pass.s" + @echo "... folding_rules.o" + @echo "... folding_rules.i" + @echo "... folding_rules.s" + @echo "... freeze_spec_constant_value_pass.o" + @echo "... freeze_spec_constant_value_pass.i" + @echo "... freeze_spec_constant_value_pass.s" + @echo "... function.o" + @echo "... function.i" + @echo "... function.s" + @echo "... if_conversion.o" + @echo "... if_conversion.i" + @echo "... if_conversion.s" + @echo "... inline_exhaustive_pass.o" + @echo "... inline_exhaustive_pass.i" + @echo "... inline_exhaustive_pass.s" + @echo "... inline_opaque_pass.o" + @echo "... inline_opaque_pass.i" + @echo "... inline_opaque_pass.s" + @echo "... inline_pass.o" + @echo "... inline_pass.i" + @echo "... inline_pass.s" + @echo "... instruction.o" + @echo "... instruction.i" + @echo "... instruction.s" + @echo "... instruction_list.o" + @echo "... instruction_list.i" + @echo "... instruction_list.s" + @echo "... ir_context.o" + @echo "... ir_context.i" + @echo "... ir_context.s" + @echo "... ir_loader.o" + @echo "... ir_loader.i" + @echo "... ir_loader.s" + @echo "... licm_pass.o" + @echo "... licm_pass.i" + @echo "... licm_pass.s" + @echo "... local_access_chain_convert_pass.o" + @echo "... local_access_chain_convert_pass.i" + @echo "... local_access_chain_convert_pass.s" + @echo "... local_redundancy_elimination.o" + @echo "... local_redundancy_elimination.i" + @echo "... local_redundancy_elimination.s" + @echo "... local_single_block_elim_pass.o" + @echo "... local_single_block_elim_pass.i" + @echo "... local_single_block_elim_pass.s" + @echo "... local_single_store_elim_pass.o" + @echo "... local_single_store_elim_pass.i" + @echo "... local_single_store_elim_pass.s" + @echo "... local_ssa_elim_pass.o" + @echo "... local_ssa_elim_pass.i" + @echo "... local_ssa_elim_pass.s" + @echo "... loop_dependence.o" + @echo "... loop_dependence.i" + @echo "... loop_dependence.s" + @echo "... loop_dependence_helpers.o" + @echo "... loop_dependence_helpers.i" + @echo "... loop_dependence_helpers.s" + @echo "... loop_descriptor.o" + @echo "... loop_descriptor.i" + @echo "... loop_descriptor.s" + @echo "... loop_fission.o" + @echo "... loop_fission.i" + @echo "... loop_fission.s" + @echo "... loop_fusion.o" + @echo "... loop_fusion.i" + @echo "... loop_fusion.s" + @echo "... loop_fusion_pass.o" + @echo "... loop_fusion_pass.i" + @echo "... loop_fusion_pass.s" + @echo "... loop_peeling.o" + @echo "... loop_peeling.i" + @echo "... loop_peeling.s" + @echo "... loop_unroller.o" + @echo "... loop_unroller.i" + @echo "... loop_unroller.s" + @echo "... loop_unswitch_pass.o" + @echo "... loop_unswitch_pass.i" + @echo "... loop_unswitch_pass.s" + @echo "... loop_utils.o" + @echo "... loop_utils.i" + @echo "... loop_utils.s" + @echo "... mem_pass.o" + @echo "... mem_pass.i" + @echo "... mem_pass.s" + @echo "... merge_return_pass.o" + @echo "... merge_return_pass.i" + @echo "... merge_return_pass.s" + @echo "... module.o" + @echo "... module.i" + @echo "... module.s" + @echo "... optimizer.o" + @echo "... optimizer.i" + @echo "... optimizer.s" + @echo "... pass.o" + @echo "... pass.i" + @echo "... pass.s" + @echo "... pass_manager.o" + @echo "... pass_manager.i" + @echo "... pass_manager.s" + @echo "... private_to_local_pass.o" + @echo "... private_to_local_pass.i" + @echo "... private_to_local_pass.s" + @echo "... propagator.o" + @echo "... propagator.i" + @echo "... propagator.s" + @echo "... reduce_load_size.o" + @echo "... reduce_load_size.i" + @echo "... reduce_load_size.s" + @echo "... redundancy_elimination.o" + @echo "... redundancy_elimination.i" + @echo "... redundancy_elimination.s" + @echo "... register_pressure.o" + @echo "... register_pressure.i" + @echo "... register_pressure.s" + @echo "... remove_duplicates_pass.o" + @echo "... remove_duplicates_pass.i" + @echo "... remove_duplicates_pass.s" + @echo "... replace_invalid_opc.o" + @echo "... replace_invalid_opc.i" + @echo "... replace_invalid_opc.s" + @echo "... scalar_analysis.o" + @echo "... scalar_analysis.i" + @echo "... scalar_analysis.s" + @echo "... scalar_analysis_simplification.o" + @echo "... scalar_analysis_simplification.i" + @echo "... scalar_analysis_simplification.s" + @echo "... scalar_replacement_pass.o" + @echo "... scalar_replacement_pass.i" + @echo "... scalar_replacement_pass.s" + @echo "... set_spec_constant_default_value_pass.o" + @echo "... set_spec_constant_default_value_pass.i" + @echo "... set_spec_constant_default_value_pass.s" + @echo "... simplification_pass.o" + @echo "... simplification_pass.i" + @echo "... simplification_pass.s" + @echo "... ssa_rewrite_pass.o" + @echo "... ssa_rewrite_pass.i" + @echo "... ssa_rewrite_pass.s" + @echo "... strength_reduction_pass.o" + @echo "... strength_reduction_pass.i" + @echo "... strength_reduction_pass.s" + @echo "... strip_debug_info_pass.o" + @echo "... strip_debug_info_pass.i" + @echo "... strip_debug_info_pass.s" + @echo "... strip_reflect_info_pass.o" + @echo "... strip_reflect_info_pass.i" + @echo "... strip_reflect_info_pass.s" + @echo "... struct_cfg_analysis.o" + @echo "... struct_cfg_analysis.i" + @echo "... struct_cfg_analysis.s" + @echo "... type_manager.o" + @echo "... type_manager.i" + @echo "... type_manager.s" + @echo "... types.o" + @echo "... types.i" + @echo "... types.s" + @echo "... unify_const_pass.o" + @echo "... unify_const_pass.i" + @echo "... unify_const_pass.s" + @echo "... value_number_table.o" + @echo "... value_number_table.i" + @echo "... value_number_table.s" + @echo "... vector_dce.o" + @echo "... vector_dce.i" + @echo "... vector_dce.s" + @echo "... workaround1209.o" + @echo "... workaround1209.i" + @echo "... workaround1209.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/source/opt/cmake_install.cmake b/3rdparty/spirv-tools/build/source/opt/cmake_install.cmake new file mode 100644 index 000000000..d087949f8 --- /dev/null +++ b/3rdparty/spirv-tools/build/source/opt/cmake_install.cmake @@ -0,0 +1,38 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/source/opt + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/libSPIRV-Tools-opt.a") +endif() + diff --git a/3rdparty/spirv-tools/build/spv-amd-gcn-shader.insts.inc b/3rdparty/spirv-tools/build/spv-amd-gcn-shader.insts.inc new file mode 100644 index 000000000..48f7f4768 --- /dev/null +++ b/3rdparty/spirv-tools/build/spv-amd-gcn-shader.insts.inc @@ -0,0 +1,7 @@ + + +static const spv_ext_inst_desc_t spv_amd_gcn_shader_entries[] = { + {"CubeFaceIndexAMD", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"CubeFaceCoordAMD", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"TimeAMD", 3, 0, nullptr, {SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/spv-amd-shader-ballot.insts.inc b/3rdparty/spirv-tools/build/spv-amd-shader-ballot.insts.inc new file mode 100644 index 000000000..6216051b9 --- /dev/null +++ b/3rdparty/spirv-tools/build/spv-amd-shader-ballot.insts.inc @@ -0,0 +1,8 @@ + + +static const spv_ext_inst_desc_t spv_amd_shader_ballot_entries[] = { + {"SwizzleInvocationsAMD", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SwizzleInvocationsMaskedAMD", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"WriteInvocationAMD", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"MbcntAMD", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/spv-amd-shader-explicit-vertex-parameter.insts.inc b/3rdparty/spirv-tools/build/spv-amd-shader-explicit-vertex-parameter.insts.inc new file mode 100644 index 000000000..6b612854f --- /dev/null +++ b/3rdparty/spirv-tools/build/spv-amd-shader-explicit-vertex-parameter.insts.inc @@ -0,0 +1,5 @@ + + +static const spv_ext_inst_desc_t spv_amd_shader_explicit_vertex_parameter_entries[] = { + {"InterpolateAtVertexAMD", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/spv-amd-shader-trinary-minmax.insts.inc b/3rdparty/spirv-tools/build/spv-amd-shader-trinary-minmax.insts.inc new file mode 100644 index 000000000..061e862a4 --- /dev/null +++ b/3rdparty/spirv-tools/build/spv-amd-shader-trinary-minmax.insts.inc @@ -0,0 +1,13 @@ + + +static const spv_ext_inst_desc_t spv_amd_shader_trinary_minmax_entries[] = { + {"FMin3AMD", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UMin3AMD", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SMin3AMD", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FMax3AMD", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UMax3AMD", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SMax3AMD", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"FMid3AMD", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"UMid3AMD", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"SMid3AMD", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; diff --git a/3rdparty/spirv-tools/build/test/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/CTestTestfile.cmake new file mode 100644 index 000000000..e2bfe247d --- /dev/null +++ b/3rdparty/spirv-tools/build/test/CTestTestfile.cmake @@ -0,0 +1,13 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs(comp) +subdirs(link) +subdirs(opt) +subdirs(stats) +subdirs(tools) +subdirs(util) +subdirs(val) diff --git a/3rdparty/spirv-tools/build/test/Makefile b/3rdparty/spirv-tools/build/test/Makefile new file mode 100644 index 000000000..3e96e0e27 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/cmake_install.cmake b/3rdparty/spirv-tools/build/test/cmake_install.cmake new file mode 100644 index 000000000..248c82ae6 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/cmake_install.cmake @@ -0,0 +1,46 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/cmake_install.cmake") + +endif() + diff --git a/3rdparty/spirv-tools/build/test/comp/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/comp/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/comp/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/comp/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/comp/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/comp/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/comp/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/comp/CTestTestfile.cmake new file mode 100644 index 000000000..898809b6f --- /dev/null +++ b/3rdparty/spirv-tools/build/test/comp/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/comp +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/comp/Makefile b/3rdparty/spirv-tools/build/test/comp/Makefile new file mode 100644 index 000000000..5dc79343e --- /dev/null +++ b/3rdparty/spirv-tools/build/test/comp/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/comp/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/comp/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/comp/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/comp/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/comp/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/comp/cmake_install.cmake b/3rdparty/spirv-tools/build/test/comp/cmake_install.cmake new file mode 100644 index 000000000..1ec0190d6 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/comp/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/comp + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/link/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/link/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/link/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/link/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/link/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/link/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/link/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/link/CTestTestfile.cmake new file mode 100644 index 000000000..1d0f6524f --- /dev/null +++ b/3rdparty/spirv-tools/build/test/link/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/link +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/link/Makefile b/3rdparty/spirv-tools/build/test/link/Makefile new file mode 100644 index 000000000..ee6adc8a5 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/link/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/link/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/link/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/link/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/link/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/link/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/link/cmake_install.cmake b/3rdparty/spirv-tools/build/test/link/cmake_install.cmake new file mode 100644 index 000000000..06ba83171 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/link/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/link + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/opt/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/opt/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/opt/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/opt/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/opt/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/opt/CTestTestfile.cmake new file mode 100644 index 000000000..40bdaf8a5 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/CTestTestfile.cmake @@ -0,0 +1,8 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/opt +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs(dominator_tree) +subdirs(loop_optimizations) diff --git a/3rdparty/spirv-tools/build/test/opt/Makefile b/3rdparty/spirv-tools/build/test/opt/Makefile new file mode 100644 index 000000000..35f310571 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/opt/cmake_install.cmake b/3rdparty/spirv-tools/build/test/opt/cmake_install.cmake new file mode 100644 index 000000000..3782e886e --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/cmake_install.cmake @@ -0,0 +1,41 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/opt + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/cmake_install.cmake") + +endif() + diff --git a/3rdparty/spirv-tools/build/test/opt/dominator_tree/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/opt/dominator_tree/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/dominator_tree/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/opt/dominator_tree/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/opt/dominator_tree/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/dominator_tree/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/opt/dominator_tree/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/opt/dominator_tree/CTestTestfile.cmake new file mode 100644 index 000000000..2551491a5 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/dominator_tree/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/opt/dominator_tree +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/opt/dominator_tree/Makefile b/3rdparty/spirv-tools/build/test/opt/dominator_tree/Makefile new file mode 100644 index 000000000..e6612fc2a --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/dominator_tree/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/dominator_tree/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/dominator_tree/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/dominator_tree/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/dominator_tree/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/dominator_tree/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/opt/dominator_tree/cmake_install.cmake b/3rdparty/spirv-tools/build/test/opt/dominator_tree/cmake_install.cmake new file mode 100644 index 000000000..6d6125c23 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/dominator_tree/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/opt/dominator_tree + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CTestTestfile.cmake new file mode 100644 index 000000000..d1cdd2771 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/opt/loop_optimizations +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/opt/loop_optimizations/Makefile b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/Makefile new file mode 100644 index 000000000..fe7c457f0 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/opt/loop_optimizations/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/loop_optimizations/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/loop_optimizations/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/loop_optimizations/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/opt/loop_optimizations/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/opt/loop_optimizations/cmake_install.cmake b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/cmake_install.cmake new file mode 100644 index 000000000..efef8eb29 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/opt/loop_optimizations/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/opt/loop_optimizations + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/stats/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/stats/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/stats/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/stats/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/stats/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/stats/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/stats/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/stats/CTestTestfile.cmake new file mode 100644 index 000000000..d1cd0b5b3 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/stats/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/stats +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/stats/Makefile b/3rdparty/spirv-tools/build/test/stats/Makefile new file mode 100644 index 000000000..f4ec097ec --- /dev/null +++ b/3rdparty/spirv-tools/build/test/stats/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/stats/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/stats/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/stats/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/stats/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/stats/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/stats/cmake_install.cmake b/3rdparty/spirv-tools/build/test/stats/cmake_install.cmake new file mode 100644 index 000000000..628487f90 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/stats/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/stats + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/tools/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/tools/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/tools/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/tools/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/tools/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/tools/CTestTestfile.cmake new file mode 100644 index 000000000..03fc8ca3a --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/tools +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs(opt) diff --git a/3rdparty/spirv-tools/build/test/tools/Makefile b/3rdparty/spirv-tools/build/test/tools/Makefile new file mode 100644 index 000000000..ba73a4ae8 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/tools/cmake_install.cmake b/3rdparty/spirv-tools/build/test/tools/cmake_install.cmake new file mode 100644 index 000000000..b97956ab1 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/cmake_install.cmake @@ -0,0 +1,40 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/tools + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/cmake_install.cmake") + +endif() + diff --git a/3rdparty/spirv-tools/build/test/tools/opt/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/tools/opt/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/opt/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/tools/opt/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/tools/opt/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/opt/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/tools/opt/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/tools/opt/CTestTestfile.cmake new file mode 100644 index 000000000..c8f61a6ef --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/opt/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/tools/opt +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(spirv_opt_tests "/usr/bin/python" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/tools/opt/../spirv_test_framework.py" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-opt" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-as" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-dis" "--test-dir" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/tools/opt") diff --git a/3rdparty/spirv-tools/build/test/tools/opt/Makefile b/3rdparty/spirv-tools/build/test/tools/opt/Makefile new file mode 100644 index 000000000..1c06f5ad6 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/opt/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/tools/opt/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/opt/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/opt/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/opt/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/tools/opt/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/tools/opt/cmake_install.cmake b/3rdparty/spirv-tools/build/test/tools/opt/cmake_install.cmake new file mode 100644 index 000000000..a55b588ed --- /dev/null +++ b/3rdparty/spirv-tools/build/test/tools/opt/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/tools/opt + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/util/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/util/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/util/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/util/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/util/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/util/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/util/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/util/CTestTestfile.cmake new file mode 100644 index 000000000..4a845aef3 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/util/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/util +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/util/Makefile b/3rdparty/spirv-tools/build/test/util/Makefile new file mode 100644 index 000000000..9680d6838 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/util/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/util/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/util/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/util/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/util/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/util/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/util/cmake_install.cmake b/3rdparty/spirv-tools/build/test/util/cmake_install.cmake new file mode 100644 index 000000000..05709a116 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/util/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/util + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/test/val/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/test/val/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/val/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/test/val/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/test/val/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/val/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/test/val/CTestTestfile.cmake b/3rdparty/spirv-tools/build/test/val/CTestTestfile.cmake new file mode 100644 index 000000000..75eb552df --- /dev/null +++ b/3rdparty/spirv-tools/build/test/val/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/val +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/test/val/Makefile b/3rdparty/spirv-tools/build/test/val/Makefile new file mode 100644 index 000000000..d90663cb7 --- /dev/null +++ b/3rdparty/spirv-tools/build/test/val/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/test/val/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/val/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/val/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/val/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 test/val/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/test/val/cmake_install.cmake b/3rdparty/spirv-tools/build/test/val/cmake_install.cmake new file mode 100644 index 000000000..c2306e5be --- /dev/null +++ b/3rdparty/spirv-tools/build/test/val/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/test/val + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/tools/CMakeFiles/progress.marks new file mode 100644 index 000000000..38b10c1b2 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/progress.marks @@ -0,0 +1 @@ +68 diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/DependInfo.cmake new file mode 100644 index 000000000..00fbefd15 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/as/as.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-as.dir/as/as.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/build.make new file mode 100644 index 000000000..5bed3b9b8 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-as.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-as.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-as.dir/flags.make + +tools/CMakeFiles/spirv-as.dir/as/as.cpp.o: tools/CMakeFiles/spirv-as.dir/flags.make +tools/CMakeFiles/spirv-as.dir/as/as.cpp.o: ../tools/as/as.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-as.dir/as/as.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-as.dir/as/as.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/as/as.cpp + +tools/CMakeFiles/spirv-as.dir/as/as.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-as.dir/as/as.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/as/as.cpp > CMakeFiles/spirv-as.dir/as/as.cpp.i + +tools/CMakeFiles/spirv-as.dir/as/as.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-as.dir/as/as.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/as/as.cpp -o CMakeFiles/spirv-as.dir/as/as.cpp.s + +tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.requires + +tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.provides: tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.provides + +tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.provides.build: tools/CMakeFiles/spirv-as.dir/as/as.cpp.o + + +# Object files for target spirv-as +spirv__as_OBJECTS = \ +"CMakeFiles/spirv-as.dir/as/as.cpp.o" + +# External object files for target spirv-as +spirv__as_EXTERNAL_OBJECTS = + +tools/spirv-as: tools/CMakeFiles/spirv-as.dir/as/as.cpp.o +tools/spirv-as: tools/CMakeFiles/spirv-as.dir/build.make +tools/spirv-as: source/libSPIRV-Tools.a +tools/spirv-as: tools/CMakeFiles/spirv-as.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable spirv-as" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-as.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-as.dir/build: tools/spirv-as + +.PHONY : tools/CMakeFiles/spirv-as.dir/build + +tools/CMakeFiles/spirv-as.dir/requires: tools/CMakeFiles/spirv-as.dir/as/as.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-as.dir/requires + +tools/CMakeFiles/spirv-as.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-as.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-as.dir/clean + +tools/CMakeFiles/spirv-as.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-as.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-as.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/cmake_clean.cmake new file mode 100644 index 000000000..8b9778f75 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-as.dir/as/as.cpp.o" + "spirv-as.pdb" + "spirv-as" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-as.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/depend.make new file mode 100644 index 000000000..5b7660ac7 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-as. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/flags.make new file mode 100644 index 000000000..345211d87 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/link.txt new file mode 100644 index 000000000..f41504091 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-as.dir/as/as.cpp.o -o spirv-as -rdynamic ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/progress.make new file mode 100644 index 000000000..6c287f17b --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-as.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/DependInfo.cmake new file mode 100644 index 000000000..899bd8520 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/bin_to_dot.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/cfg.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../external/SPIRV-Headers/include" + "../include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/build.make new file mode 100644 index 000000000..a4e1a4517 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/build.make @@ -0,0 +1,141 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-cfg.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-cfg.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-cfg.dir/flags.make + +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o: tools/CMakeFiles/spirv-cfg.dir/flags.make +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o: ../tools/cfg/cfg.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/cfg.cpp + +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/cfg.cpp > CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.i + +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/cfg.cpp -o CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.s + +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.requires + +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.provides: tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.provides + +tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.provides.build: tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o + + +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o: tools/CMakeFiles/spirv-cfg.dir/flags.make +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o: ../tools/cfg/bin_to_dot.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/bin_to_dot.cpp + +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/bin_to_dot.cpp > CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.i + +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/cfg/bin_to_dot.cpp -o CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.s + +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.requires + +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.provides: tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.provides + +tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.provides.build: tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o + + +# Object files for target spirv-cfg +spirv__cfg_OBJECTS = \ +"CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o" \ +"CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o" + +# External object files for target spirv-cfg +spirv__cfg_EXTERNAL_OBJECTS = + +tools/spirv-cfg: tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o +tools/spirv-cfg: tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o +tools/spirv-cfg: tools/CMakeFiles/spirv-cfg.dir/build.make +tools/spirv-cfg: source/libSPIRV-Tools.a +tools/spirv-cfg: tools/CMakeFiles/spirv-cfg.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable spirv-cfg" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-cfg.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-cfg.dir/build: tools/spirv-cfg + +.PHONY : tools/CMakeFiles/spirv-cfg.dir/build + +tools/CMakeFiles/spirv-cfg.dir/requires: tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o.requires +tools/CMakeFiles/spirv-cfg.dir/requires: tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-cfg.dir/requires + +tools/CMakeFiles/spirv-cfg.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-cfg.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-cfg.dir/clean + +tools/CMakeFiles/spirv-cfg.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-cfg.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-cfg.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/cmake_clean.cmake new file mode 100644 index 000000000..eb374d1cb --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o" + "CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o" + "spirv-cfg.pdb" + "spirv-cfg" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-cfg.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/depend.make new file mode 100644 index 000000000..f8110739a --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-cfg. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/flags.make new file mode 100644 index 000000000..589eae28d --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/link.txt new file mode 100644 index 000000000..087407d64 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o -o spirv-cfg -rdynamic ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/progress.make new file mode 100644 index 000000000..fa35c6a68 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-cfg.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 90 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 91 + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/DependInfo.cmake new file mode 100644 index 000000000..ee063aeb3 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/dis/dis.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/build.make new file mode 100644 index 000000000..0d0095248 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-dis.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-dis.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-dis.dir/flags.make + +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o: tools/CMakeFiles/spirv-dis.dir/flags.make +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o: ../tools/dis/dis.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-dis.dir/dis/dis.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/dis/dis.cpp + +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-dis.dir/dis/dis.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/dis/dis.cpp > CMakeFiles/spirv-dis.dir/dis/dis.cpp.i + +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-dis.dir/dis/dis.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/dis/dis.cpp -o CMakeFiles/spirv-dis.dir/dis/dis.cpp.s + +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.requires + +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.provides: tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.provides + +tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.provides.build: tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o + + +# Object files for target spirv-dis +spirv__dis_OBJECTS = \ +"CMakeFiles/spirv-dis.dir/dis/dis.cpp.o" + +# External object files for target spirv-dis +spirv__dis_EXTERNAL_OBJECTS = + +tools/spirv-dis: tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o +tools/spirv-dis: tools/CMakeFiles/spirv-dis.dir/build.make +tools/spirv-dis: source/libSPIRV-Tools.a +tools/spirv-dis: tools/CMakeFiles/spirv-dis.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable spirv-dis" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-dis.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-dis.dir/build: tools/spirv-dis + +.PHONY : tools/CMakeFiles/spirv-dis.dir/build + +tools/CMakeFiles/spirv-dis.dir/requires: tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-dis.dir/requires + +tools/CMakeFiles/spirv-dis.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-dis.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-dis.dir/clean + +tools/CMakeFiles/spirv-dis.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-dis.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-dis.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/cmake_clean.cmake new file mode 100644 index 000000000..c72ed8cf6 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-dis.dir/dis/dis.cpp.o" + "spirv-dis.pdb" + "spirv-dis" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-dis.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/depend.make new file mode 100644 index 000000000..9b19f218f --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-dis. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/flags.make new file mode 100644 index 000000000..345211d87 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/link.txt new file mode 100644 index 000000000..dde414fcb --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-dis.dir/dis/dis.cpp.o -o spirv-dis -rdynamic ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/progress.make new file mode 100644 index 000000000..6c287f17b --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-dis.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/DependInfo.cmake new file mode 100644 index 000000000..882b02210 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/link/linker.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../include" + "../external/SPIRV-Headers/include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/link/CMakeFiles/SPIRV-Tools-link.dir/DependInfo.cmake" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/build.make new file mode 100644 index 000000000..fc50026d4 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/build.make @@ -0,0 +1,117 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-link.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-link.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-link.dir/flags.make + +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o: tools/CMakeFiles/spirv-link.dir/flags.make +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o: ../tools/link/linker.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-link.dir/link/linker.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/link/linker.cpp + +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-link.dir/link/linker.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/link/linker.cpp > CMakeFiles/spirv-link.dir/link/linker.cpp.i + +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-link.dir/link/linker.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/link/linker.cpp -o CMakeFiles/spirv-link.dir/link/linker.cpp.s + +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.requires + +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.provides: tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.provides + +tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.provides.build: tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o + + +# Object files for target spirv-link +spirv__link_OBJECTS = \ +"CMakeFiles/spirv-link.dir/link/linker.cpp.o" + +# External object files for target spirv-link +spirv__link_EXTERNAL_OBJECTS = + +tools/spirv-link: tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o +tools/spirv-link: tools/CMakeFiles/spirv-link.dir/build.make +tools/spirv-link: source/link/libSPIRV-Tools-link.a +tools/spirv-link: source/libSPIRV-Tools.a +tools/spirv-link: source/opt/libSPIRV-Tools-opt.a +tools/spirv-link: source/libSPIRV-Tools.a +tools/spirv-link: tools/CMakeFiles/spirv-link.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable spirv-link" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-link.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-link.dir/build: tools/spirv-link + +.PHONY : tools/CMakeFiles/spirv-link.dir/build + +tools/CMakeFiles/spirv-link.dir/requires: tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-link.dir/requires + +tools/CMakeFiles/spirv-link.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-link.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-link.dir/clean + +tools/CMakeFiles/spirv-link.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-link.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-link.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/cmake_clean.cmake new file mode 100644 index 000000000..62e50eea5 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-link.dir/link/linker.cpp.o" + "spirv-link.pdb" + "spirv-link" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-link.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/depend.make new file mode 100644 index 000000000..62d564368 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-link. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/flags.make new file mode 100644 index 000000000..c06dd6241 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/link.txt new file mode 100644 index 000000000..4c5101ee8 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-link.dir/link/linker.cpp.o -o spirv-link -rdynamic ../source/link/libSPIRV-Tools-link.a ../source/libSPIRV-Tools.a ../source/opt/libSPIRV-Tools-opt.a ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/progress.make new file mode 100644 index 000000000..c9a8f7fc9 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-link.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 92 +CMAKE_PROGRESS_2 = + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/DependInfo.cmake new file mode 100644 index 000000000..df812ca00 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/opt/opt.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../include" + "../external/SPIRV-Headers/include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/opt/CMakeFiles/SPIRV-Tools-opt.dir/DependInfo.cmake" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/build.make new file mode 100644 index 000000000..5bb5c6b45 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/build.make @@ -0,0 +1,142 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-opt.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-opt.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-opt.dir/flags.make + +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o: tools/CMakeFiles/spirv-opt.dir/flags.make +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o: ../tools/opt/opt.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-opt.dir/opt/opt.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/opt/opt.cpp + +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-opt.dir/opt/opt.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/opt/opt.cpp > CMakeFiles/spirv-opt.dir/opt/opt.cpp.i + +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-opt.dir/opt/opt.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/opt/opt.cpp -o CMakeFiles/spirv-opt.dir/opt/opt.cpp.s + +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.requires + +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.provides: tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.provides + +tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.provides.build: tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o + + +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o: tools/CMakeFiles/spirv-opt.dir/flags.make +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o: ../tools/util/cli_consumer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp + +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp > CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.i + +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp -o CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.s + +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.requires + +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.provides: tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.provides + +tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.provides.build: tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o + + +# Object files for target spirv-opt +spirv__opt_OBJECTS = \ +"CMakeFiles/spirv-opt.dir/opt/opt.cpp.o" \ +"CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o" + +# External object files for target spirv-opt +spirv__opt_EXTERNAL_OBJECTS = + +tools/spirv-opt: tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o +tools/spirv-opt: tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o +tools/spirv-opt: tools/CMakeFiles/spirv-opt.dir/build.make +tools/spirv-opt: source/opt/libSPIRV-Tools-opt.a +tools/spirv-opt: source/libSPIRV-Tools.a +tools/spirv-opt: tools/CMakeFiles/spirv-opt.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable spirv-opt" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-opt.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-opt.dir/build: tools/spirv-opt + +.PHONY : tools/CMakeFiles/spirv-opt.dir/build + +tools/CMakeFiles/spirv-opt.dir/requires: tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o.requires +tools/CMakeFiles/spirv-opt.dir/requires: tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-opt.dir/requires + +tools/CMakeFiles/spirv-opt.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-opt.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-opt.dir/clean + +tools/CMakeFiles/spirv-opt.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-opt.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-opt.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/cmake_clean.cmake new file mode 100644 index 000000000..3fb9bbd8b --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-opt.dir/opt/opt.cpp.o" + "CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o" + "spirv-opt.pdb" + "spirv-opt" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-opt.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/depend.make new file mode 100644 index 000000000..937f386d2 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-opt. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/flags.make new file mode 100644 index 000000000..c06dd6241 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/link.txt new file mode 100644 index 000000000..bffd34811 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-opt.dir/opt/opt.cpp.o CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o -o spirv-opt -rdynamic ../source/opt/libSPIRV-Tools-opt.a ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/progress.make new file mode 100644 index 000000000..6b9468eef --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-opt.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 93 +CMAKE_PROGRESS_3 = + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/DependInfo.cmake new file mode 100644 index 000000000..05743be00 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/spirv_stats.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats_analyzer.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../external/SPIRV-Headers/include" + "../include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/build.make new file mode 100644 index 000000000..a26885adb --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/build.make @@ -0,0 +1,168 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-stats.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-stats.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-stats.dir/flags.make + +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o: tools/CMakeFiles/spirv-stats.dir/flags.make +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o: ../tools/stats/stats.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-stats.dir/stats/stats.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats.cpp + +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-stats.dir/stats/stats.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats.cpp > CMakeFiles/spirv-stats.dir/stats/stats.cpp.i + +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-stats.dir/stats/stats.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats.cpp -o CMakeFiles/spirv-stats.dir/stats/stats.cpp.s + +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.requires + +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.provides: tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.provides + +tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.provides.build: tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o + + +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o: tools/CMakeFiles/spirv-stats.dir/flags.make +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o: ../tools/stats/stats_analyzer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats_analyzer.cpp + +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats_analyzer.cpp > CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.i + +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/stats_analyzer.cpp -o CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.s + +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.requires + +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.provides: tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.provides + +tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.provides.build: tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o + + +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o: tools/CMakeFiles/spirv-stats.dir/flags.make +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o: ../tools/stats/spirv_stats.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/spirv_stats.cpp + +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/spirv_stats.cpp > CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.i + +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/stats/spirv_stats.cpp -o CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.s + +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.requires + +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.provides: tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.provides + +tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.provides.build: tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o + + +# Object files for target spirv-stats +spirv__stats_OBJECTS = \ +"CMakeFiles/spirv-stats.dir/stats/stats.cpp.o" \ +"CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o" \ +"CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o" + +# External object files for target spirv-stats +spirv__stats_EXTERNAL_OBJECTS = + +tools/spirv-stats: tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o +tools/spirv-stats: tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o +tools/spirv-stats: tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o +tools/spirv-stats: tools/CMakeFiles/spirv-stats.dir/build.make +tools/spirv-stats: source/libSPIRV-Tools.a +tools/spirv-stats: tools/CMakeFiles/spirv-stats.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking CXX executable spirv-stats" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-stats.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-stats.dir/build: tools/spirv-stats + +.PHONY : tools/CMakeFiles/spirv-stats.dir/build + +tools/CMakeFiles/spirv-stats.dir/requires: tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o.requires +tools/CMakeFiles/spirv-stats.dir/requires: tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o.requires +tools/CMakeFiles/spirv-stats.dir/requires: tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-stats.dir/requires + +tools/CMakeFiles/spirv-stats.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-stats.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-stats.dir/clean + +tools/CMakeFiles/spirv-stats.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-stats.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-stats.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/cmake_clean.cmake new file mode 100644 index 000000000..6f50c2f92 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-stats.dir/stats/stats.cpp.o" + "CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o" + "CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o" + "spirv-stats.pdb" + "spirv-stats" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-stats.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/depend.make new file mode 100644 index 000000000..b87af6a0d --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-stats. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/flags.make new file mode 100644 index 000000000..589eae28d --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/external/SPIRV-Headers/include -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/link.txt new file mode 100644 index 000000000..c8e9b15bb --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-stats.dir/stats/stats.cpp.o CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o -o spirv-stats -rdynamic ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/progress.make new file mode 100644 index 000000000..948758795 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-stats.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = 94 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 95 + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/DependInfo.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/DependInfo.cmake new file mode 100644 index 000000000..cc7c799ea --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o" + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/val/val.cpp" "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-val.dir/val/val.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "SPIRV_CHECK_CONTEXT" + "SPIRV_COLOR_TERMINAL" + "SPIRV_LINUX" + "SPIRV_TIMER_ENABLED" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../" + "." + "../include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/source/CMakeFiles/SPIRV-Tools.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/build.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/build.make new file mode 100644 index 000000000..d1fb5f4d5 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/build.make @@ -0,0 +1,141 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +# Include any dependencies generated for this target. +include tools/CMakeFiles/spirv-val.dir/depend.make + +# Include the progress variables for this target. +include tools/CMakeFiles/spirv-val.dir/progress.make + +# Include the compile flags for this target's objects. +include tools/CMakeFiles/spirv-val.dir/flags.make + +tools/CMakeFiles/spirv-val.dir/val/val.cpp.o: tools/CMakeFiles/spirv-val.dir/flags.make +tools/CMakeFiles/spirv-val.dir/val/val.cpp.o: ../tools/val/val.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object tools/CMakeFiles/spirv-val.dir/val/val.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-val.dir/val/val.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/val/val.cpp + +tools/CMakeFiles/spirv-val.dir/val/val.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-val.dir/val/val.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/val/val.cpp > CMakeFiles/spirv-val.dir/val/val.cpp.i + +tools/CMakeFiles/spirv-val.dir/val/val.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-val.dir/val/val.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/val/val.cpp -o CMakeFiles/spirv-val.dir/val/val.cpp.s + +tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.requires + +tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.provides: tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.provides + +tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.provides.build: tools/CMakeFiles/spirv-val.dir/val/val.cpp.o + + +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o: tools/CMakeFiles/spirv-val.dir/flags.make +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o: ../tools/util/cli_consumer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o -c /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp + +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.i" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp > CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.i + +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.s" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/util/cli_consumer.cpp -o CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.s + +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.requires: + +.PHONY : tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.requires + +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.provides: tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.requires + $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.provides.build +.PHONY : tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.provides + +tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.provides.build: tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o + + +# Object files for target spirv-val +spirv__val_OBJECTS = \ +"CMakeFiles/spirv-val.dir/val/val.cpp.o" \ +"CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o" + +# External object files for target spirv-val +spirv__val_EXTERNAL_OBJECTS = + +tools/spirv-val: tools/CMakeFiles/spirv-val.dir/val/val.cpp.o +tools/spirv-val: tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o +tools/spirv-val: tools/CMakeFiles/spirv-val.dir/build.make +tools/spirv-val: source/libSPIRV-Tools.a +tools/spirv-val: tools/CMakeFiles/spirv-val.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable spirv-val" + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/spirv-val.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tools/CMakeFiles/spirv-val.dir/build: tools/spirv-val + +.PHONY : tools/CMakeFiles/spirv-val.dir/build + +tools/CMakeFiles/spirv-val.dir/requires: tools/CMakeFiles/spirv-val.dir/val/val.cpp.o.requires +tools/CMakeFiles/spirv-val.dir/requires: tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o.requires + +.PHONY : tools/CMakeFiles/spirv-val.dir/requires + +tools/CMakeFiles/spirv-val.dir/clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools && $(CMAKE_COMMAND) -P CMakeFiles/spirv-val.dir/cmake_clean.cmake +.PHONY : tools/CMakeFiles/spirv-val.dir/clean + +tools/CMakeFiles/spirv-val.dir/depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/bkaradzic/Private/projects/_github/SPIRV-Tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/spirv-val.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tools/CMakeFiles/spirv-val.dir/depend + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/cmake_clean.cmake b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/cmake_clean.cmake new file mode 100644 index 000000000..2fcc9ead1 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/spirv-val.dir/val/val.cpp.o" + "CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o" + "spirv-val.pdb" + "spirv-val" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/spirv-val.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/depend.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/depend.make new file mode 100644 index 000000000..cda017148 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for spirv-val. +# This may be replaced when dependencies are built. diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/flags.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/flags.make new file mode 100644 index 000000000..345211d87 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -g -fPIE -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -Werror -std=c++11 -fno-exceptions -fno-rtti -Wno-long-long -Wshadow -Wundef -Wconversion -Wno-sign-conversion -std=gnu++11 + +CXX_DEFINES = -DSPIRV_CHECK_CONTEXT -DSPIRV_COLOR_TERMINAL -DSPIRV_LINUX -DSPIRV_TIMER_ENABLED + +CXX_INCLUDES = -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build -I/home/bkaradzic/Private/projects/_github/SPIRV-Tools/include + diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/link.txt b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/link.txt new file mode 100644 index 000000000..acd8cc0d7 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ -g CMakeFiles/spirv-val.dir/val/val.cpp.o CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o -o spirv-val -rdynamic ../source/libSPIRV-Tools.a diff --git a/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/progress.make b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/progress.make new file mode 100644 index 000000000..ec90ad949 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CMakeFiles/spirv-val.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 99 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 100 + diff --git a/3rdparty/spirv-tools/build/tools/CTestTestfile.cmake b/3rdparty/spirv-tools/build/tools/CTestTestfile.cmake new file mode 100644 index 000000000..e76c3f478 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/CTestTestfile.cmake @@ -0,0 +1,8 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs(lesspipe) +subdirs(emacs) diff --git a/3rdparty/spirv-tools/build/tools/Makefile b/3rdparty/spirv-tools/build/tools/Makefile new file mode 100644 index 000000000..9f7ca48ab --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/Makefile @@ -0,0 +1,639 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +tools/CMakeFiles/spirv-cfg.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-cfg.dir/rule +.PHONY : tools/CMakeFiles/spirv-cfg.dir/rule + +# Convenience name for target. +spirv-cfg: tools/CMakeFiles/spirv-cfg.dir/rule + +.PHONY : spirv-cfg + +# fast build rule for target. +spirv-cfg/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/build +.PHONY : spirv-cfg/fast + +# Convenience name for target. +tools/CMakeFiles/spirv-dis.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-dis.dir/rule +.PHONY : tools/CMakeFiles/spirv-dis.dir/rule + +# Convenience name for target. +spirv-dis: tools/CMakeFiles/spirv-dis.dir/rule + +.PHONY : spirv-dis + +# fast build rule for target. +spirv-dis/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/build +.PHONY : spirv-dis/fast + +# Convenience name for target. +tools/CMakeFiles/spirv-as.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-as.dir/rule +.PHONY : tools/CMakeFiles/spirv-as.dir/rule + +# Convenience name for target. +spirv-as: tools/CMakeFiles/spirv-as.dir/rule + +.PHONY : spirv-as + +# fast build rule for target. +spirv-as/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/build +.PHONY : spirv-as/fast + +# Convenience name for target. +tools/CMakeFiles/spirv-val.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-val.dir/rule +.PHONY : tools/CMakeFiles/spirv-val.dir/rule + +# Convenience name for target. +spirv-val: tools/CMakeFiles/spirv-val.dir/rule + +.PHONY : spirv-val + +# fast build rule for target. +spirv-val/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/build +.PHONY : spirv-val/fast + +# Convenience name for target. +tools/CMakeFiles/spirv-link.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-link.dir/rule +.PHONY : tools/CMakeFiles/spirv-link.dir/rule + +# Convenience name for target. +spirv-link: tools/CMakeFiles/spirv-link.dir/rule + +.PHONY : spirv-link + +# fast build rule for target. +spirv-link/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/build +.PHONY : spirv-link/fast + +# Convenience name for target. +tools/CMakeFiles/spirv-opt.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-opt.dir/rule +.PHONY : tools/CMakeFiles/spirv-opt.dir/rule + +# Convenience name for target. +spirv-opt: tools/CMakeFiles/spirv-opt.dir/rule + +.PHONY : spirv-opt + +# fast build rule for target. +spirv-opt/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/build +.PHONY : spirv-opt/fast + +# Convenience name for target. +tools/CMakeFiles/spirv-stats.dir/rule: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/spirv-stats.dir/rule +.PHONY : tools/CMakeFiles/spirv-stats.dir/rule + +# Convenience name for target. +spirv-stats: tools/CMakeFiles/spirv-stats.dir/rule + +.PHONY : spirv-stats + +# fast build rule for target. +spirv-stats/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/build +.PHONY : spirv-stats/fast + +as/as.o: as/as.cpp.o + +.PHONY : as/as.o + +# target to build an object file +as/as.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/as/as.cpp.o +.PHONY : as/as.cpp.o + +as/as.i: as/as.cpp.i + +.PHONY : as/as.i + +# target to preprocess a source file +as/as.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/as/as.cpp.i +.PHONY : as/as.cpp.i + +as/as.s: as/as.cpp.s + +.PHONY : as/as.s + +# target to generate assembly for a file +as/as.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-as.dir/build.make tools/CMakeFiles/spirv-as.dir/as/as.cpp.s +.PHONY : as/as.cpp.s + +cfg/bin_to_dot.o: cfg/bin_to_dot.cpp.o + +.PHONY : cfg/bin_to_dot.o + +# target to build an object file +cfg/bin_to_dot.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.o +.PHONY : cfg/bin_to_dot.cpp.o + +cfg/bin_to_dot.i: cfg/bin_to_dot.cpp.i + +.PHONY : cfg/bin_to_dot.i + +# target to preprocess a source file +cfg/bin_to_dot.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.i +.PHONY : cfg/bin_to_dot.cpp.i + +cfg/bin_to_dot.s: cfg/bin_to_dot.cpp.s + +.PHONY : cfg/bin_to_dot.s + +# target to generate assembly for a file +cfg/bin_to_dot.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/bin_to_dot.cpp.s +.PHONY : cfg/bin_to_dot.cpp.s + +cfg/cfg.o: cfg/cfg.cpp.o + +.PHONY : cfg/cfg.o + +# target to build an object file +cfg/cfg.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.o +.PHONY : cfg/cfg.cpp.o + +cfg/cfg.i: cfg/cfg.cpp.i + +.PHONY : cfg/cfg.i + +# target to preprocess a source file +cfg/cfg.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.i +.PHONY : cfg/cfg.cpp.i + +cfg/cfg.s: cfg/cfg.cpp.s + +.PHONY : cfg/cfg.s + +# target to generate assembly for a file +cfg/cfg.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-cfg.dir/build.make tools/CMakeFiles/spirv-cfg.dir/cfg/cfg.cpp.s +.PHONY : cfg/cfg.cpp.s + +dis/dis.o: dis/dis.cpp.o + +.PHONY : dis/dis.o + +# target to build an object file +dis/dis.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.o +.PHONY : dis/dis.cpp.o + +dis/dis.i: dis/dis.cpp.i + +.PHONY : dis/dis.i + +# target to preprocess a source file +dis/dis.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.i +.PHONY : dis/dis.cpp.i + +dis/dis.s: dis/dis.cpp.s + +.PHONY : dis/dis.s + +# target to generate assembly for a file +dis/dis.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-dis.dir/build.make tools/CMakeFiles/spirv-dis.dir/dis/dis.cpp.s +.PHONY : dis/dis.cpp.s + +link/linker.o: link/linker.cpp.o + +.PHONY : link/linker.o + +# target to build an object file +link/linker.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/link/linker.cpp.o +.PHONY : link/linker.cpp.o + +link/linker.i: link/linker.cpp.i + +.PHONY : link/linker.i + +# target to preprocess a source file +link/linker.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/link/linker.cpp.i +.PHONY : link/linker.cpp.i + +link/linker.s: link/linker.cpp.s + +.PHONY : link/linker.s + +# target to generate assembly for a file +link/linker.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-link.dir/build.make tools/CMakeFiles/spirv-link.dir/link/linker.cpp.s +.PHONY : link/linker.cpp.s + +opt/opt.o: opt/opt.cpp.o + +.PHONY : opt/opt.o + +# target to build an object file +opt/opt.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.o +.PHONY : opt/opt.cpp.o + +opt/opt.i: opt/opt.cpp.i + +.PHONY : opt/opt.i + +# target to preprocess a source file +opt/opt.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.i +.PHONY : opt/opt.cpp.i + +opt/opt.s: opt/opt.cpp.s + +.PHONY : opt/opt.s + +# target to generate assembly for a file +opt/opt.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/opt/opt.cpp.s +.PHONY : opt/opt.cpp.s + +stats/spirv_stats.o: stats/spirv_stats.cpp.o + +.PHONY : stats/spirv_stats.o + +# target to build an object file +stats/spirv_stats.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.o +.PHONY : stats/spirv_stats.cpp.o + +stats/spirv_stats.i: stats/spirv_stats.cpp.i + +.PHONY : stats/spirv_stats.i + +# target to preprocess a source file +stats/spirv_stats.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.i +.PHONY : stats/spirv_stats.cpp.i + +stats/spirv_stats.s: stats/spirv_stats.cpp.s + +.PHONY : stats/spirv_stats.s + +# target to generate assembly for a file +stats/spirv_stats.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/spirv_stats.cpp.s +.PHONY : stats/spirv_stats.cpp.s + +stats/stats.o: stats/stats.cpp.o + +.PHONY : stats/stats.o + +# target to build an object file +stats/stats.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.o +.PHONY : stats/stats.cpp.o + +stats/stats.i: stats/stats.cpp.i + +.PHONY : stats/stats.i + +# target to preprocess a source file +stats/stats.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.i +.PHONY : stats/stats.cpp.i + +stats/stats.s: stats/stats.cpp.s + +.PHONY : stats/stats.s + +# target to generate assembly for a file +stats/stats.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats.cpp.s +.PHONY : stats/stats.cpp.s + +stats/stats_analyzer.o: stats/stats_analyzer.cpp.o + +.PHONY : stats/stats_analyzer.o + +# target to build an object file +stats/stats_analyzer.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.o +.PHONY : stats/stats_analyzer.cpp.o + +stats/stats_analyzer.i: stats/stats_analyzer.cpp.i + +.PHONY : stats/stats_analyzer.i + +# target to preprocess a source file +stats/stats_analyzer.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.i +.PHONY : stats/stats_analyzer.cpp.i + +stats/stats_analyzer.s: stats/stats_analyzer.cpp.s + +.PHONY : stats/stats_analyzer.s + +# target to generate assembly for a file +stats/stats_analyzer.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-stats.dir/build.make tools/CMakeFiles/spirv-stats.dir/stats/stats_analyzer.cpp.s +.PHONY : stats/stats_analyzer.cpp.s + +util/cli_consumer.o: util/cli_consumer.cpp.o + +.PHONY : util/cli_consumer.o + +# target to build an object file +util/cli_consumer.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.o + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.o +.PHONY : util/cli_consumer.cpp.o + +util/cli_consumer.i: util/cli_consumer.cpp.i + +.PHONY : util/cli_consumer.i + +# target to preprocess a source file +util/cli_consumer.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.i + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.i +.PHONY : util/cli_consumer.cpp.i + +util/cli_consumer.s: util/cli_consumer.cpp.s + +.PHONY : util/cli_consumer.s + +# target to generate assembly for a file +util/cli_consumer.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/util/cli_consumer.cpp.s + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-opt.dir/build.make tools/CMakeFiles/spirv-opt.dir/util/cli_consumer.cpp.s +.PHONY : util/cli_consumer.cpp.s + +val/val.o: val/val.cpp.o + +.PHONY : val/val.o + +# target to build an object file +val/val.cpp.o: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/val/val.cpp.o +.PHONY : val/val.cpp.o + +val/val.i: val/val.cpp.i + +.PHONY : val/val.i + +# target to preprocess a source file +val/val.cpp.i: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/val/val.cpp.i +.PHONY : val/val.cpp.i + +val/val.s: val/val.cpp.s + +.PHONY : val/val.s + +# target to generate assembly for a file +val/val.cpp.s: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f tools/CMakeFiles/spirv-val.dir/build.make tools/CMakeFiles/spirv-val.dir/val/val.cpp.s +.PHONY : val/val.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... rebuild_cache" + @echo "... list_install_components" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... install" + @echo "... spirv-cfg" + @echo "... spirv-dis" + @echo "... spirv-as" + @echo "... spirv-val" + @echo "... spirv-link" + @echo "... spirv-opt" + @echo "... install/local" + @echo "... test" + @echo "... spirv-stats" + @echo "... as/as.o" + @echo "... as/as.i" + @echo "... as/as.s" + @echo "... cfg/bin_to_dot.o" + @echo "... cfg/bin_to_dot.i" + @echo "... cfg/bin_to_dot.s" + @echo "... cfg/cfg.o" + @echo "... cfg/cfg.i" + @echo "... cfg/cfg.s" + @echo "... dis/dis.o" + @echo "... dis/dis.i" + @echo "... dis/dis.s" + @echo "... link/linker.o" + @echo "... link/linker.i" + @echo "... link/linker.s" + @echo "... opt/opt.o" + @echo "... opt/opt.i" + @echo "... opt/opt.s" + @echo "... stats/spirv_stats.o" + @echo "... stats/spirv_stats.i" + @echo "... stats/spirv_stats.s" + @echo "... stats/stats.o" + @echo "... stats/stats.i" + @echo "... stats/stats.s" + @echo "... stats/stats_analyzer.o" + @echo "... stats/stats_analyzer.i" + @echo "... stats/stats_analyzer.s" + @echo "... util/cli_consumer.o" + @echo "... util/cli_consumer.i" + @echo "... util/cli_consumer.s" + @echo "... val/val.o" + @echo "... val/val.i" + @echo "... val/val.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/tools/cmake_install.cmake b/3rdparty/spirv-tools/build/tools/cmake_install.cmake new file mode 100644 index 000000000..de142775b --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/cmake_install.cmake @@ -0,0 +1,153 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-as" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-as") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-as" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-as") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-as" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-as") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-as") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-dis" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-dis") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-dis" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-dis") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-dis" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-dis") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-dis") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-val" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-val") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-val" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-val") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-val" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-val") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-val") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-opt" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-opt") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-opt" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-opt") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-opt" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-opt") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-opt") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-stats" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-stats") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-stats" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-stats") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-stats" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-stats") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-stats") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-cfg" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-cfg") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-cfg" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-cfg") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-cfg" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-cfg") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-cfg") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-link" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-link") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-link" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/spirv-link") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-link" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-link") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/spirv-link") + endif() + endif() +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/cmake_install.cmake") + include("/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/cmake_install.cmake") + +endif() + diff --git a/3rdparty/spirv-tools/build/tools/emacs/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/tools/emacs/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/emacs/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/tools/emacs/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/tools/emacs/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/emacs/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/tools/emacs/CTestTestfile.cmake b/3rdparty/spirv-tools/build/tools/emacs/CTestTestfile.cmake new file mode 100644 index 000000000..e2a7b0f49 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/emacs/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/emacs +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/tools/emacs/Makefile b/3rdparty/spirv-tools/build/tools/emacs/Makefile new file mode 100644 index 000000000..4b8c2b57a --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/emacs/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/emacs/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/emacs/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/emacs/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/emacs/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/emacs/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/tools/emacs/cmake_install.cmake b/3rdparty/spirv-tools/build/tools/emacs/cmake_install.cmake new file mode 100644 index 000000000..09980b79b --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/emacs/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/emacs + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + diff --git a/3rdparty/spirv-tools/build/tools/lesspipe/CMakeFiles/CMakeDirectoryInformation.cmake b/3rdparty/spirv-tools/build/tools/lesspipe/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..b636c3f88 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/lesspipe/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/bkaradzic/Private/projects/_github/SPIRV-Tools") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/3rdparty/spirv-tools/build/tools/lesspipe/CMakeFiles/progress.marks b/3rdparty/spirv-tools/build/tools/lesspipe/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/lesspipe/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/3rdparty/spirv-tools/build/tools/lesspipe/CTestTestfile.cmake b/3rdparty/spirv-tools/build/tools/lesspipe/CTestTestfile.cmake new file mode 100644 index 000000000..ece23213d --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/lesspipe/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/lesspipe +# Build directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/3rdparty/spirv-tools/build/tools/lesspipe/Makefile b/3rdparty/spirv-tools/build/tools/lesspipe/Makefile new file mode 100644 index 000000000..f199ea43b --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/lesspipe/Makefile @@ -0,0 +1,194 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: install/strip + +.PHONY : install/strip/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: install/local + +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/tools/lesspipe/CMakeFiles/progress.marks + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/lesspipe/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/lesspipe/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/lesspipe/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(MAKE) -f CMakeFiles/Makefile2 tools/lesspipe/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install" + @echo "... edit_cache" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... test" + @echo "... install/local" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/bkaradzic/Private/projects/_github/SPIRV-Tools/build && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdparty/spirv-tools/build/tools/lesspipe/cmake_install.cmake b/3rdparty/spirv-tools/build/tools/lesspipe/cmake_install.cmake new file mode 100644 index 000000000..d27e3efa4 --- /dev/null +++ b/3rdparty/spirv-tools/build/tools/lesspipe/cmake_install.cmake @@ -0,0 +1,38 @@ +# Install script for directory: /home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/lesspipe + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE PROGRAM FILES "/home/bkaradzic/Private/projects/_github/SPIRV-Tools/tools/lesspipe/spirv-lesspipe.sh") +endif() + diff --git a/3rdparty/spirv-tools/external/CMakeLists.txt b/3rdparty/spirv-tools/external/CMakeLists.txt index da0b2e649..d1251c248 100644 --- a/3rdparty/spirv-tools/external/CMakeLists.txt +++ b/3rdparty/spirv-tools/external/CMakeLists.txt @@ -66,57 +66,39 @@ if (NOT ${SPIRV_SKIP_TESTS}) endforeach() endif() - set(SPIRV_ENABLE_EFFCEE ON) - if (MSVC) - if (MSVC_VERSION LESS 1900) - message(STATUS "SPIRV-Tools: Need Visual Studio 2015 or later for Effcee and RE2") - set(SPIRV_ENABLE_EFFCEE OFF) - endif() - endif() + # Find Effcee and RE2, for testing. - if (SPIRV_ENABLE_EFFCEE) - # Find Effcee and RE2, for testing. - # Optional for now, but eventually we'll make this required. - - # First find RE2, since Effcee depends on it. - # If already configured, then use that. Otherwise, prefer to find it under 're2' - # in this directory. - if (NOT TARGET re2) - # If we are configuring RE2, then turn off its testing. It takes a long time and - # does not add much value for us. If an enclosing project configured RE2, then it - # has already chosen whether to enable RE2 tesitng. - set(RE2_BUILD_TESTING OFF CACHE STRING "Run RE2 Tests") - if (NOT RE2_SOURCE_DIR) - if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/re2) - set(RE2_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/re2" CACHE STRING "RE2 source dir" ) - endif() + # First find RE2, since Effcee depends on it. + # If already configured, then use that. Otherwise, prefer to find it under 're2' + # in this directory. + if (NOT TARGET re2) + # If we are configuring RE2, then turn off its testing. It takes a long time and + # does not add much value for us. If an enclosing project configured RE2, then it + # has already chosen whether to enable RE2 testing. + set(RE2_BUILD_TESTING OFF CACHE STRING "Run RE2 Tests") + if (NOT RE2_SOURCE_DIR) + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/re2) + set(RE2_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/re2" CACHE STRING "RE2 source dir" ) endif() endif() + endif() - if (NOT TARGET effcee) - # Expect to find effcee in this directory. - if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/effcee) - # If we're configuring RE2 (via Effcee), then turn off RE2 testing. - if (NOT TARGET re2) - set(RE2_BUILD_TESTING OFF) - endif() - if (MSVC) - # SPIRV-Tools uses the shared CRT with MSVC. Tell Effcee to do the same. - set(EFFCEE_ENABLE_SHARED_CRT ON) - endif() - add_subdirectory(effcee) - set_property(TARGET effcee PROPERTY FOLDER Effcee) - # Turn off warnings for effcee and re2 - set_property(TARGET effcee APPEND PROPERTY COMPILE_OPTIONS -w) - set_property(TARGET re2 APPEND PROPERTY COMPILE_OPTIONS -w) + if (NOT TARGET effcee) + # Expect to find effcee in this directory. + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/effcee) + # If we're configuring RE2 (via Effcee), then turn off RE2 testing. + if (NOT TARGET re2) + set(RE2_BUILD_TESTING OFF) endif() + if (MSVC) + # SPIRV-Tools uses the shared CRT with MSVC. Tell Effcee to do the same. + set(EFFCEE_ENABLE_SHARED_CRT ON) + endif() + add_subdirectory(effcee) + set_property(TARGET effcee PROPERTY FOLDER Effcee) + # Turn off warnings for effcee and re2 + set_property(TARGET effcee APPEND PROPERTY COMPILE_OPTIONS -w) + set_property(TARGET re2 APPEND PROPERTY COMPILE_OPTIONS -w) endif() - # TODO(dneto): Eventually, require this. endif() - if (TARGET effcee) - message(STATUS "SPIRV-Tools: Effcee is configured") - else() - message(STATUS "SPIRV-Tools: Effcee is not configured. Skipping Effcee-based tests.") - endif() - endif() diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/CMakeLists.txt b/3rdparty/spirv-tools/external/SPIRV-Headers/CMakeLists.txt index 2488baf0a..167a3e7cb 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/CMakeLists.txt +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/CMakeLists.txt @@ -57,4 +57,12 @@ add_custom_target(install-headers COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/include/spirv) -add_subdirectory(example) +option(SPIRV_HEADERS_SKIP_EXAMPLES "Skip building examples" + ${SPIRV_HEADERS_SKIP_EXAMPLES}) +if(NOT ${SPIRV_HEADERS_SKIP_EXAMPLES}) + set(SPIRV_HEADERS_ENABLE_EXAMPLES ON) +endif() +if (SPIRV_HEADERS_ENABLE_EXAMPLES) + message(STATUS "Building SPIRV-Header examples") + add_subdirectory(example) +endif() diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/CODE_OF_CONDUCT.md b/3rdparty/spirv-tools/external/SPIRV-Headers/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..a11610bd3 --- /dev/null +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/CODE_OF_CONDUCT.md @@ -0,0 +1 @@ +A reminder that this issue tracker is managed by the Khronos Group. Interactions here should follow the Khronos Code of Conduct (https://www.khronos.org/developers/code-of-conduct), which prohibits aggressive or derogatory language. Please keep the discussion friendly and civil. diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.cs b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.cs new file mode 100644 index 000000000..de325cc4a --- /dev/null +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.0/spirv.cs @@ -0,0 +1,993 @@ +// Copyright (c) 2014-2018 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python, C# +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, e.g.: Spv.Specification.SourceLanguage.GLSL +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +namespace Spv +{ + + public static class Specification + { + public const uint MagicNumber = 0x07230203; + public const uint Version = 0x00010000; + public const uint Revision = 12; + public const uint OpCodeMask = 0xffff; + public const uint WordCountShift = 16; + + public enum SourceLanguage + { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + HLSL = 5, + } + + public enum ExecutionModel + { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + } + + public enum AddressingModel + { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + } + + public enum MemoryModel + { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + } + + public enum ExecutionMode + { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + PostDepthCoverage = 4446, + StencilRefReplacingEXT = 5027, + } + + public enum StorageClass + { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + StorageBuffer = 12, + } + + public enum Dim + { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + } + + public enum SamplerAddressingMode + { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + } + + public enum SamplerFilterMode + { + Nearest = 0, + Linear = 1, + } + + public enum ImageFormat + { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + } + + public enum ImageChannelOrder + { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + } + + public enum ImageChannelDataType + { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + } + + public enum ImageOperandsShift + { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + } + + public enum ImageOperandsMask + { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + } + + public enum FPFastMathModeShift + { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + } + + public enum FPFastMathModeMask + { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, + } + + public enum FPRoundingMode + { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + } + + public enum LinkageType + { + Export = 0, + Import = 1, + } + + public enum AccessQualifier + { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + } + + public enum FunctionParameterAttribute + { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + } + + public enum Decoration + { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + ExplicitInterpAMD = 4999, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + HlslCounterBufferGOOGLE = 5634, + HlslSemanticGOOGLE = 5635, + } + + public enum BuiltIn + { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMaskKHR = 4416, + SubgroupGeMaskKHR = 4417, + SubgroupGtMaskKHR = 4418, + SubgroupLeMaskKHR = 4419, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + BaryCoordNoPerspAMD = 4992, + BaryCoordNoPerspCentroidAMD = 4993, + BaryCoordNoPerspSampleAMD = 4994, + BaryCoordSmoothAMD = 4995, + BaryCoordSmoothCentroidAMD = 4996, + BaryCoordSmoothSampleAMD = 4997, + BaryCoordPullModelAMD = 4998, + FragStencilRefEXT = 5014, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + } + + public enum SelectionControlShift + { + Flatten = 0, + DontFlatten = 1, + } + + public enum SelectionControlMask + { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, + } + + public enum LoopControlShift + { + Unroll = 0, + DontUnroll = 1, + } + + public enum LoopControlMask + { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + } + + public enum FunctionControlShift + { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + } + + public enum FunctionControlMask + { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, + } + + public enum MemorySemanticsShift + { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + } + + public enum MemorySemanticsMask + { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + } + + public enum MemoryAccessShift + { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + } + + public enum MemoryAccessMask + { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + } + + public enum Scope + { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + } + + public enum GroupOperation + { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + } + + public enum KernelEnqueueFlags + { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + } + + public enum KernelProfilingInfoShift + { + CmdExecTime = 0, + } + + public enum KernelProfilingInfoMask + { + MaskNone = 0, + CmdExecTime = 0x00000001, + } + + public enum Capability + { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageBuffer16BitAccess = 4433, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + UniformAndStorageBuffer16BitAccess = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + VariablePointersStorageBuffer = 4441, + VariablePointers = 4442, + AtomicStorageOps = 4445, + SampleMaskPostDepthCoverage = 4447, + ImageGatherBiasLodAMD = 5009, + FragmentMaskAMD = 5010, + StencilExportEXT = 5013, + ImageReadWriteLodAMD = 5015, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerEXT = 5254, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + SubgroupShuffleINTEL = 5568, + SubgroupBufferBlockIOINTEL = 5569, + SubgroupImageBlockIOINTEL = 5570, + } + + public enum Op + { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpDecorateId = 332, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateStringGOOGLE = 5633, + } + } +} + diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.cs b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.cs new file mode 100644 index 000000000..99194e514 --- /dev/null +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.1/spirv.cs @@ -0,0 +1,1015 @@ +// Copyright (c) 2014-2018 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python, C# +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, e.g.: Spv.Specification.SourceLanguage.GLSL +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +namespace Spv +{ + + public static class Specification + { + public const uint MagicNumber = 0x07230203; + public const uint Version = 0x00010100; + public const uint Revision = 8; + public const uint OpCodeMask = 0xffff; + public const uint WordCountShift = 16; + + public enum SourceLanguage + { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + HLSL = 5, + } + + public enum ExecutionModel + { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + } + + public enum AddressingModel + { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + } + + public enum MemoryModel + { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + } + + public enum ExecutionMode + { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + PostDepthCoverage = 4446, + StencilRefReplacingEXT = 5027, + } + + public enum StorageClass + { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + StorageBuffer = 12, + } + + public enum Dim + { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + } + + public enum SamplerAddressingMode + { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + } + + public enum SamplerFilterMode + { + Nearest = 0, + Linear = 1, + } + + public enum ImageFormat + { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + } + + public enum ImageChannelOrder + { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + } + + public enum ImageChannelDataType + { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + } + + public enum ImageOperandsShift + { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + } + + public enum ImageOperandsMask + { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + } + + public enum FPFastMathModeShift + { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + } + + public enum FPFastMathModeMask + { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, + } + + public enum FPRoundingMode + { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + } + + public enum LinkageType + { + Export = 0, + Import = 1, + } + + public enum AccessQualifier + { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + } + + public enum FunctionParameterAttribute + { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + } + + public enum Decoration + { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + ExplicitInterpAMD = 4999, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + HlslCounterBufferGOOGLE = 5634, + HlslSemanticGOOGLE = 5635, + } + + public enum BuiltIn + { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMaskKHR = 4416, + SubgroupGeMaskKHR = 4417, + SubgroupGtMaskKHR = 4418, + SubgroupLeMaskKHR = 4419, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + BaryCoordNoPerspAMD = 4992, + BaryCoordNoPerspCentroidAMD = 4993, + BaryCoordNoPerspSampleAMD = 4994, + BaryCoordSmoothAMD = 4995, + BaryCoordSmoothCentroidAMD = 4996, + BaryCoordSmoothSampleAMD = 4997, + BaryCoordPullModelAMD = 4998, + FragStencilRefEXT = 5014, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + } + + public enum SelectionControlShift + { + Flatten = 0, + DontFlatten = 1, + } + + public enum SelectionControlMask + { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, + } + + public enum LoopControlShift + { + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, + } + + public enum LoopControlMask + { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, + } + + public enum FunctionControlShift + { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + } + + public enum FunctionControlMask + { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, + } + + public enum MemorySemanticsShift + { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + } + + public enum MemorySemanticsMask + { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + } + + public enum MemoryAccessShift + { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + } + + public enum MemoryAccessMask + { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + } + + public enum Scope + { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + } + + public enum GroupOperation + { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + } + + public enum KernelEnqueueFlags + { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + } + + public enum KernelProfilingInfoShift + { + CmdExecTime = 0, + } + + public enum KernelProfilingInfoMask + { + MaskNone = 0, + CmdExecTime = 0x00000001, + } + + public enum Capability + { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageBuffer16BitAccess = 4433, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + UniformAndStorageBuffer16BitAccess = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + VariablePointersStorageBuffer = 4441, + VariablePointers = 4442, + AtomicStorageOps = 4445, + SampleMaskPostDepthCoverage = 4447, + ImageGatherBiasLodAMD = 5009, + FragmentMaskAMD = 5010, + StencilExportEXT = 5013, + ImageReadWriteLodAMD = 5015, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerEXT = 5254, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + SubgroupShuffleINTEL = 5568, + SubgroupBufferBlockIOINTEL = 5569, + SubgroupImageBlockIOINTEL = 5570, + } + + public enum Op + { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpDecorateId = 332, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateStringGOOGLE = 5633, + } + } +} + diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.cs b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.cs new file mode 100644 index 000000000..493303d6a --- /dev/null +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.cs @@ -0,0 +1,1021 @@ +// Copyright (c) 2014-2018 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python, C# +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, e.g.: Spv.Specification.SourceLanguage.GLSL +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +namespace Spv +{ + + public static class Specification + { + public const uint MagicNumber = 0x07230203; + public const uint Version = 0x00010200; + public const uint Revision = 2; + public const uint OpCodeMask = 0xffff; + public const uint WordCountShift = 16; + + public enum SourceLanguage + { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + HLSL = 5, + } + + public enum ExecutionModel + { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + } + + public enum AddressingModel + { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + } + + public enum MemoryModel + { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + } + + public enum ExecutionMode + { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + SubgroupsPerWorkgroupId = 37, + LocalSizeId = 38, + LocalSizeHintId = 39, + PostDepthCoverage = 4446, + StencilRefReplacingEXT = 5027, + } + + public enum StorageClass + { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + StorageBuffer = 12, + } + + public enum Dim + { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + } + + public enum SamplerAddressingMode + { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + } + + public enum SamplerFilterMode + { + Nearest = 0, + Linear = 1, + } + + public enum ImageFormat + { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + } + + public enum ImageChannelOrder + { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + } + + public enum ImageChannelDataType + { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + } + + public enum ImageOperandsShift + { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + } + + public enum ImageOperandsMask + { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + } + + public enum FPFastMathModeShift + { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + } + + public enum FPFastMathModeMask + { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, + } + + public enum FPRoundingMode + { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + } + + public enum LinkageType + { + Export = 0, + Import = 1, + } + + public enum AccessQualifier + { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + } + + public enum FunctionParameterAttribute + { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + } + + public enum Decoration + { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + AlignmentId = 46, + MaxByteOffsetId = 47, + ExplicitInterpAMD = 4999, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + HlslCounterBufferGOOGLE = 5634, + HlslSemanticGOOGLE = 5635, + } + + public enum BuiltIn + { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMaskKHR = 4416, + SubgroupGeMaskKHR = 4417, + SubgroupGtMaskKHR = 4418, + SubgroupLeMaskKHR = 4419, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + BaryCoordNoPerspAMD = 4992, + BaryCoordNoPerspCentroidAMD = 4993, + BaryCoordNoPerspSampleAMD = 4994, + BaryCoordSmoothAMD = 4995, + BaryCoordSmoothCentroidAMD = 4996, + BaryCoordSmoothSampleAMD = 4997, + BaryCoordPullModelAMD = 4998, + FragStencilRefEXT = 5014, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + } + + public enum SelectionControlShift + { + Flatten = 0, + DontFlatten = 1, + } + + public enum SelectionControlMask + { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, + } + + public enum LoopControlShift + { + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, + } + + public enum LoopControlMask + { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, + } + + public enum FunctionControlShift + { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + } + + public enum FunctionControlMask + { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, + } + + public enum MemorySemanticsShift + { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + } + + public enum MemorySemanticsMask + { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + } + + public enum MemoryAccessShift + { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + } + + public enum MemoryAccessMask + { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + } + + public enum Scope + { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + } + + public enum GroupOperation + { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + } + + public enum KernelEnqueueFlags + { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + } + + public enum KernelProfilingInfoShift + { + CmdExecTime = 0, + } + + public enum KernelProfilingInfoMask + { + MaskNone = 0, + CmdExecTime = 0x00000001, + } + + public enum Capability + { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageBuffer16BitAccess = 4433, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + UniformAndStorageBuffer16BitAccess = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + VariablePointersStorageBuffer = 4441, + VariablePointers = 4442, + AtomicStorageOps = 4445, + SampleMaskPostDepthCoverage = 4447, + ImageGatherBiasLodAMD = 5009, + FragmentMaskAMD = 5010, + StencilExportEXT = 5013, + ImageReadWriteLodAMD = 5015, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerEXT = 5254, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + SubgroupShuffleINTEL = 5568, + SubgroupBufferBlockIOINTEL = 5569, + SubgroupImageBlockIOINTEL = 5570, + } + + public enum Op + { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpExecutionModeId = 331, + OpDecorateId = 332, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateStringGOOGLE = 5633, + } + } +} + diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.py b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/1.2/spirv.py old mode 100755 new mode 100644 diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/spir-v.xml b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/spir-v.xml index b05bfa7c4..d7e6e481a 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/spir-v.xml +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/spir-v.xml @@ -69,7 +69,8 @@ - + + diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h index fe759e1bc..fa383a37e 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/OpenCL.std.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2015-2017 The Khronos Group Inc. +** Copyright (c) 2015-2019 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a copy ** of this software and/or associated documentation files (the "Materials"), diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json old mode 100755 new mode 100644 index cb641420d..cd1785965 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.core.grammar.json @@ -3813,6 +3813,83 @@ "extensions" : [ "SPV_AMD_shader_fragment_mask" ], "version" : "None" }, + { + "opname" : "OpWritePackedPrimitiveIndices4x8NV", + "opcode" : 5299, + "operands" : [ + { "kind" : "IdRef", "name" : "'Index Offset'" }, + { "kind" : "IdRef", "name" : "'Packed Indices'" } + ], + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "opname" : "OpReportIntersectionNV", + "opcode" : 5334, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Hit'" }, + { "kind" : "IdRef", "name" : "'HitKind'" } + ], + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "opname" : "OpIgnoreIntersectionNV", + "opcode" : 5335, + + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "opname" : "OpTerminateRayNV", + "opcode" : 5336, + + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "opname" : "OpTraceNV", + "opcode" : 5337, + "operands" : [ + + { "kind" : "IdRef", "name" : "'Accel'" }, + { "kind" : "IdRef", "name" : "'Ray Flags'" }, + { "kind" : "IdRef", "name" : "'Cull Mask'" }, + { "kind" : "IdRef", "name" : "'SBT Offset'" }, + { "kind" : "IdRef", "name" : "'SBT Stride'" }, + { "kind" : "IdRef", "name" : "'Miss Index'" }, + { "kind" : "IdRef", "name" : "'Ray Origin'" }, + { "kind" : "IdRef", "name" : "'Ray Tmin'" }, + { "kind" : "IdRef", "name" : "'Ray Direction'" }, + { "kind" : "IdRef", "name" : "'Ray Tmax'" }, + { "kind" : "IdRef", "name" : "'PayloadId'" } + ], + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "opname" : "OpTypeAccelerationStructureNV", + "opcode" : 5341, + "operands" : [ + { "kind" : "IdResult" } + ], + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "opname" : "OpExecuteCallableNV", + "opcode" : 5344, + "operands" : [ + + { "kind" : "IdRef", "name" : "'SBT Index'" }, + { "kind" : "IdRef", "name" : "'Callable DataId'" } + ], + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, { "opname" : "OpSubgroupShuffleINTEL", "opcode" : 5571, @@ -3939,6 +4016,22 @@ "capabilities" : [ "GroupNonUniformPartitionedNV" ], "extensions" : [ "SPV_NV_shader_subgroup_partitioned" ], "version" : "None" + }, + { + "opname" : "OpImageSampleFootprintNV", + "opcode" : 5283, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Sampled Image'" }, + { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "'Granularity'" }, + { "kind" : "IdRef", "name" : "'Coarse'" }, + { "kind" : "ImageOperands", "quantifier" : "?" } + ], + "capabilities" : [ "ImageFootprintNV" ], + "extensions" : [ "SPV_NV_shader_image_footprint" ], + "version" : "None" } ], "operand_kinds" : [ @@ -4010,6 +4103,32 @@ "parameters" : [ { "kind" : "IdRef" } ] + }, + { + "enumerant" : "MakeTexelAvailableKHR", + "value" : "0x0100", + "capabilities" : [ "VulkanMemoryModelKHR" ], + "parameters" : [ + { "kind" : "IdScope" } + ] + }, + { + "enumerant" : "MakeTexelVisibleKHR", + "value" : "0x0200", + "capabilities" : [ "VulkanMemoryModelKHR" ], + "parameters" : [ + { "kind" : "IdScope" } + ] + }, + { + "enumerant" : "NonPrivateTexelKHR", + "value" : "0x0400", + "capabilities" : [ "VulkanMemoryModelKHR" ] + }, + { + "enumerant" : "VolatileTexelKHR", + "value" : "0x0800", + "capabilities" : [ "VulkanMemoryModelKHR" ] } ] }, @@ -4176,6 +4295,21 @@ { "enumerant" : "ImageMemory", "value" : "0x0800" + }, + { + "enumerant" : "OutputMemoryKHR", + "value" : "0x1000", + "capabilities" : [ "VulkanMemoryModelKHR" ] + }, + { + "enumerant" : "MakeAvailableKHR", + "value" : "0x2000", + "capabilities" : [ "VulkanMemoryModelKHR" ] + }, + { + "enumerant" : "MakeVisibleKHR", + "value" : "0x4000", + "capabilities" : [ "VulkanMemoryModelKHR" ] } ] }, @@ -4201,6 +4335,27 @@ { "enumerant" : "Nontemporal", "value" : "0x0004" + }, + { + "enumerant" : "MakePointerAvailableKHR", + "value" : "0x0008", + "parameters" : [ + { "kind" : "IdScope" } + ], + "capabilities" : [ "VulkanMemoryModelKHR" ] + }, + { + "enumerant" : "MakePointerVisibleKHR", + "value" : "0x0010", + "parameters" : [ + { "kind" : "IdScope" } + ], + "capabilities" : [ "VulkanMemoryModelKHR" ] + }, + { + "enumerant" : "NonPrivatePointerKHR", + "value" : "0x0020", + "capabilities" : [ "VulkanMemoryModelKHR" ] } ] }, @@ -4287,6 +4442,46 @@ "enumerant" : "Kernel", "value" : 6, "capabilities" : [ "Kernel" ] + }, + { + "enumerant" : "TaskNV", + "value" : 5267, + "capabilities" : [ "MeshShadingNV" ] + }, + { + "enumerant" : "MeshNV", + "value" : 5268, + "capabilities" : [ "MeshShadingNV" ] + }, + { + "enumerant" : "RayGenerationNV", + "value" : 5313, + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "IntersectionNV", + "value" : 5314, + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "AnyHitNV", + "value" : 5315, + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "ClosestHitNV", + "value" : 5316, + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "MissNV", + "value" : 5317, + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "CallableNV", + "value" : 5318, + "capabilities" : [ "RayTracingNV" ] } ] }, @@ -4328,6 +4523,11 @@ "enumerant" : "OpenCL", "value" : 2, "capabilities" : [ "Kernel" ] + }, + { + "enumerant" : "VulkanKHR", + "value" : 3, + "capabilities" : [ "VulkanMemoryModelKHR" ] } ] }, @@ -4475,7 +4675,7 @@ { "enumerant" : "OutputVertices", "value" : 26, - "capabilities" : [ "Geometry", "Tessellation" ], + "capabilities" : [ "Geometry", "Tessellation", "MeshShadingNV" ], "parameters" : [ { "kind" : "LiteralInteger", "name" : "'Vertex count'" } ] @@ -4483,7 +4683,7 @@ { "enumerant" : "OutputPoints", "value" : 27, - "capabilities" : [ "Geometry" ] + "capabilities" : [ "Geometry", "MeshShadingNV" ] }, { "enumerant" : "OutputLineStrip", @@ -4573,12 +4773,100 @@ "extensions" : [ "SPV_KHR_post_depth_coverage" ], "version" : "None" }, +{ + "enumerant" : "DenormPreserve", + "value" : 4459, + "capabilities" : [ "DenormPreserve"], + "extensions" : [ "SPV_KHR_float_controls" ], + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Target Width'" } + ], + "version" : "None" + }, + { + "enumerant" : "DenormFlushToZero", + "value" : 4460, + "capabilities" : [ "DenormFlushToZero"], + "extensions" : [ "SPV_KHR_float_controls" ], + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Target Width'" } + ], + "version" : "None" + }, + { + "enumerant" : "SignedZeroInfNanPreserve", + "value" : 4461, + "capabilities" : [ "SignedZeroInfNanPreserve"], + "extensions" : [ "SPV_KHR_float_controls" ], + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Target Width'" } + ], + "version" : "None" + }, + { + "enumerant" : "RoundingModeRTE", + "value" : 4462, + "capabilities" : [ "RoundingModeRTE"], + "extensions" : [ "SPV_KHR_float_controls" ], + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Target Width'" } + ], + "version" : "None" + }, + { + "enumerant" : "RoundingModeRTZ", + "value" : 4463, + "capabilities" : [ "RoundingModeRTZ"], + "extensions" : [ "SPV_KHR_float_controls" ], + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Target Width'" } + ], + "version" : "None" + }, { "enumerant" : "StencilRefReplacingEXT", "value" : 5027, "capabilities" : [ "StencilExportEXT" ], "extensions" : [ "SPV_EXT_shader_stencil_export" ], "version" : "None" + }, + { + "enumerant" : "OutputLinesNV", + "value" : 5269, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "OutputPrimitivesNV", + "value" : 5270, + "capabilities" : [ "MeshShadingNV" ], + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Primitive count'" } + ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "DerivativeGroupQuadsNV", + "value" : 5289, + "capabilities" : [ "ComputeDerivativeGroupQuadsNV" ], + "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "version" : "None" + }, + { + "enumerant" : "DerivativeGroupLinearNV", + "value" : 5290, + "capabilities" : [ "ComputeDerivativeGroupLinearNV" ], + "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "version" : "None" + }, + { + "enumerant" : "OutputTrianglesNV", + "value" : 5298, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" } ] }, @@ -4649,6 +4937,42 @@ ], "capabilities" : [ "Shader" ], "version" : "1.3" + }, + { + "enumerant" : "CallableDataNV", + "value" : 5328, + "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "IncomingCallableDataNV", + "value" : 5329, + "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "RayPayloadNV", + "value" : 5338, + "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "HitAttributeNV", + "value" : 5339, + "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "IncomingRayPayloadNV", + "value" : 5342, + "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" ] + }, + { + "enumerant" : "ShaderRecordBufferNV", + "value" : 5343, + "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" ] } ] }, @@ -4659,11 +4983,12 @@ { "enumerant" : "1D", "value" : 0, - "capabilities" : [ "Sampled1D" ] + "capabilities" : [ "Sampled1D", "Image1D" ] }, { "enumerant" : "2D", - "value" : 1 + "value" : 1, + "capabilities" : [ "Shader", "Kernel", "ImageMSArray" ] }, { "enumerant" : "3D", @@ -4672,17 +4997,17 @@ { "enumerant" : "Cube", "value" : 3, - "capabilities" : [ "Shader" ] + "capabilities" : [ "Shader", "ImageCubeArray" ] }, { "enumerant" : "Rect", "value" : 4, - "capabilities" : [ "SampledRect" ] + "capabilities" : [ "SampledRect", "ImageRect" ] }, { "enumerant" : "Buffer", "value" : 5, - "capabilities" : [ "SampledBuffer" ] + "capabilities" : [ "SampledBuffer", "ImageBuffer" ] }, { "enumerant" : "SubpassData", @@ -5541,6 +5866,18 @@ ], "version" : "1.2" }, + { + "enumerant" : "NoSignedWrap", + "value" : 4469, + "extensions" : [ "SPV_KHR_no_integer_wrap_decoration" ], + "version" : "None" + }, + { + "enumerant" : "NoUnsignedWrap", + "value" : 4470, + "extensions" : [ "SPV_KHR_no_integer_wrap_decoration" ], + "version" : "None" + }, { "enumerant" : "ExplicitInterpAMD", "value" : 4999, @@ -5577,6 +5914,34 @@ { "kind" : "LiteralInteger", "name" : "'Offset'" } ] }, + { + "enumerant" : "PerPrimitiveNV", + "value" : 5271, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "PerViewNV", + "value" : 5272, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "PerTaskNV", + "value" : 5273, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "PerVertexNV", + "value" : 5285, + "capabilities" : [ "FragmentBarycentricNV" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "version" : "None" + }, { "enumerant" : "NonUniformEXT", "value" : 5300, @@ -5639,7 +6004,7 @@ { "enumerant" : "PrimitiveId", "value" : 7, - "capabilities" : [ "Geometry", "Tessellation" ] + "capabilities" : [ "Geometry", "Tessellation", "RayTracingNV" ] }, { "enumerant" : "InvocationId", @@ -5887,8 +6252,8 @@ { "enumerant" : "DrawIndex", "value" : 4426, - "capabilities" : [ "DrawParameters" ], - "extensions" : [ "SPV_KHR_shader_draw_parameters" ], + "capabilities" : [ "DrawParameters", "MeshShadingNV" ], + "extensions" : [ "SPV_KHR_shader_draw_parameters", "SPV_NV_mesh_shader" ], "version" : "1.3" }, { @@ -5957,7 +6322,8 @@ { "enumerant" : "ViewportMaskNV", "value" : 5253, - "capabilities" : [ "ShaderViewportMaskNV" ], + "capabilities" : [ "ShaderViewportMaskNV", "MeshShadingNV" ], + "extensions" : [ "SPV_NV_viewport_array2", "SPV_NV_mesh_shader" ], "version" : "None" }, { @@ -5977,13 +6343,15 @@ { "enumerant" : "PositionPerViewNV", "value" : 5261, - "capabilities" : [ "PerViewAttributesNV" ], + "capabilities" : [ "PerViewAttributesNV", "MeshShadingNV" ], + "extensions" : [ "SPV_NVX_multiview_per_view_attributes", "SPV_NV_mesh_shader" ], "version" : "None" }, { "enumerant" : "ViewportMaskPerViewNV", "value" : 5262, - "capabilities" : [ "PerViewAttributesNV" ], + "capabilities" : [ "PerViewAttributesNV", "MeshShadingNV" ], + "extensions" : [ "SPV_NVX_multiview_per_view_attributes", "SPV_NV_mesh_shader" ], "version" : "None" }, { @@ -5992,6 +6360,188 @@ "capabilities" : [ "FragmentFullyCoveredEXT" ], "extensions" : [ "SPV_EXT_fragment_fully_covered" ], "version" : "None" + }, + { + "enumerant" : "TaskCountNV", + "value" : 5274, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "PrimitiveCountNV", + "value" : 5275, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "PrimitiveIndicesNV", + "value" : 5276, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "ClipDistancePerViewNV", + "value" : 5277, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "CullDistancePerViewNV", + "value" : 5278, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "LayerPerViewNV", + "value" : 5279, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "MeshViewCountNV", + "value" : 5280, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "MeshViewIndicesNV", + "value" : 5281, + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, + { + "enumerant" : "BaryCoordNV", + "value" : 5286, + "capabilities" : [ "FragmentBarycentricNV" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "version" : "None" + }, + { + "enumerant" : "BaryCoordNoPerspNV", + "value" : 5287, + "capabilities" : [ "FragmentBarycentricNV" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "version" : "None" + }, + { + "enumerant" : "FragSizeEXT", + "value" : 5292 , + "capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ], + "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ], + "version" : "None" + }, + { + "enumerant" : "FragmentSizeNV", + "value" : 5292 , + "capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ], + "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ], + "version" : "None" + }, + { + "enumerant" : "FragInvocationCountEXT", + "value" : 5293, + "capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ], + "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ], + "version" : "None" + }, + { + "enumerant" : "InvocationsPerPixelNV", + "value" : 5293, + "capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ], + "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ], + "version" : "None" + }, + { + "enumerant" : "LaunchIdNV", + "value" : 5319, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "LaunchSizeNV", + "value" : 5320, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "WorldRayOriginNV", + "value" : 5321, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "WorldRayDirectionNV", + "value" : 5322, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "ObjectRayOriginNV", + "value" : 5323, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "ObjectRayDirectionNV", + "value" : 5324, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "RayTminNV", + "value" : 5325, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "RayTmaxNV", + "value" : 5326, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "InstanceCustomIndexNV", + "value" : 5327, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "ObjectToWorldNV", + "value" : 5330, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "WorldToObjectNV", + "value" : 5331, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "HitTNV", + "value" : 5332, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "HitKindNV", + "value" : 5333, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] + }, + { + "enumerant" : "IncomingRayFlagsNV", + "value" : 5351, + "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" ] } ] }, @@ -6018,6 +6568,11 @@ { "enumerant" : "Invocation", "value" : 4 + }, + { + "enumerant" : "QueueFamilyKHR", + "value" : 5, + "capabilities" : [ "VulkanMemoryModelKHR" ] } ] }, @@ -6548,6 +7103,36 @@ "extensions" : [ "SPV_KHR_8bit_storage" ], "version" : "None" }, + { + "enumerant" : "DenormPreserve", + "value" : 4464, + "extensions" : [ "SPV_KHR_float_controls" ], + "version" : "None" + }, + { + "enumerant" : "DenormFlushToZero", + "value" : 4465, + "extensions" : [ "SPV_KHR_float_controls" ], + "version" : "None" + }, + { + "enumerant" : "SignedZeroInfNanPreserve", + "value" : 4466, + "extensions" : [ "SPV_KHR_float_controls" ], + "version" : "None" + }, + { + "enumerant" : "RoundingModeRTE", + "value" : 4467, + "extensions" : [ "SPV_KHR_float_controls" ], + "version" : "None" + }, + { + "enumerant" : "RoundingModeRTZ", + "value" : 4468, + "extensions" : [ "SPV_KHR_float_controls" ], + "version" : "None" + }, { "enumerant" : "Float16ImageAMD", "value" : 5008, @@ -6639,6 +7224,13 @@ "extensions" : [ "SPV_EXT_fragment_fully_covered" ], "version" : "None" }, + { + "enumerant" : "MeshShadingNV", + "value" : 5266, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_NV_mesh_shader" ], + "version" : "None" + }, { "enumerant" : "ShaderNonUniformEXT", "value" : 5301, @@ -6723,6 +7315,13 @@ "extensions" : [ "SPV_EXT_descriptor_indexing" ], "version" : "None" }, + { + "enumerant" : "RayTracingNV", + "value" : 5340, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_NV_ray_tracing" ], + "version" : "None" + }, { "enumerant" : "SubgroupShuffleINTEL", "value" : 5568, @@ -6746,6 +7345,56 @@ "value" : 5297, "extensions" : [ "SPV_NV_shader_subgroup_partitioned" ], "version" : "None" + }, + { + "enumerant" : "VulkanMemoryModelKHR", + "value" : 5345, + "extensions" : [ "SPV_KHR_vulkan_memory_model" ], + "version" : "None" + }, + { + "enumerant" : "VulkanMemoryModelDeviceScopeKHR", + "value" : 5346, + "extensions" : [ "SPV_KHR_vulkan_memory_model" ], + "version" : "None" + }, + { + "enumerant" : "ImageFootprintNV", + "value" : 5282, + "extensions" : [ "SPV_NV_shader_image_footprint" ], + "version" : "None" + }, + { + "enumerant" : "FragmentBarycentricNV", + "value" : 5284, + "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "version" : "None" + }, + { + "enumerant" : "ComputeDerivativeGroupQuadsNV", + "value" : 5288, + "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "version" : "None" + }, + { + "enumerant" : "ComputeDerivativeGroupLinearNV", + "value" : 5350, + "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "version" : "None" + }, + { + "enumerant" : "FragmentDensityEXT", + "value" : 5291, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ], + "version" : "None" + }, + { + "enumerant" : "ShadingRateNV", + "value" : 5291, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ], + "version" : "None" } ] }, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.cs b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.cs new file mode 100644 index 000000000..bde9c1fc5 --- /dev/null +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.cs @@ -0,0 +1,1198 @@ +// Copyright (c) 2014-2019 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python, C#, D +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, +// e.g.: Spv.Specification.SourceLanguage.GLSL +// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +namespace Spv +{ + + public static class Specification + { + public const uint MagicNumber = 0x07230203; + public const uint Version = 0x00010300; + public const uint Revision = 6; + public const uint OpCodeMask = 0xffff; + public const uint WordCountShift = 16; + + public enum SourceLanguage + { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + HLSL = 5, + } + + public enum ExecutionModel + { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + TaskNV = 5267, + MeshNV = 5268, + RayGenerationNV = 5313, + IntersectionNV = 5314, + AnyHitNV = 5315, + ClosestHitNV = 5316, + MissNV = 5317, + CallableNV = 5318, + } + + public enum AddressingModel + { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + } + + public enum MemoryModel + { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + VulkanKHR = 3, + } + + public enum ExecutionMode + { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + SubgroupsPerWorkgroupId = 37, + LocalSizeId = 38, + LocalSizeHintId = 39, + PostDepthCoverage = 4446, + DenormPreserve = 4459, + DenormFlushToZero = 4460, + SignedZeroInfNanPreserve = 4461, + RoundingModeRTE = 4462, + RoundingModeRTZ = 4463, + StencilRefReplacingEXT = 5027, + OutputLinesNV = 5269, + OutputPrimitivesNV = 5270, + DerivativeGroupQuadsNV = 5289, + DerivativeGroupLinearNV = 5290, + OutputTrianglesNV = 5298, + } + + public enum StorageClass + { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + StorageBuffer = 12, + CallableDataNV = 5328, + IncomingCallableDataNV = 5329, + RayPayloadNV = 5338, + HitAttributeNV = 5339, + IncomingRayPayloadNV = 5342, + ShaderRecordBufferNV = 5343, + } + + public enum Dim + { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + } + + public enum SamplerAddressingMode + { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + } + + public enum SamplerFilterMode + { + Nearest = 0, + Linear = 1, + } + + public enum ImageFormat + { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + } + + public enum ImageChannelOrder + { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + } + + public enum ImageChannelDataType + { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + } + + public enum ImageOperandsShift + { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + MakeTexelAvailableKHR = 8, + MakeTexelVisibleKHR = 9, + NonPrivateTexelKHR = 10, + VolatileTexelKHR = 11, + } + + public enum ImageOperandsMask + { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + MakeTexelAvailableKHR = 0x00000100, + MakeTexelVisibleKHR = 0x00000200, + NonPrivateTexelKHR = 0x00000400, + VolatileTexelKHR = 0x00000800, + } + + public enum FPFastMathModeShift + { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + } + + public enum FPFastMathModeMask + { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, + } + + public enum FPRoundingMode + { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + } + + public enum LinkageType + { + Export = 0, + Import = 1, + } + + public enum AccessQualifier + { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + } + + public enum FunctionParameterAttribute + { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + } + + public enum Decoration + { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + AlignmentId = 46, + MaxByteOffsetId = 47, + NoSignedWrap = 4469, + NoUnsignedWrap = 4470, + ExplicitInterpAMD = 4999, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + PerPrimitiveNV = 5271, + PerViewNV = 5272, + PerTaskNV = 5273, + PerVertexNV = 5285, + NonUniformEXT = 5300, + HlslCounterBufferGOOGLE = 5634, + HlslSemanticGOOGLE = 5635, + } + + public enum BuiltIn + { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMask = 4416, + SubgroupEqMaskKHR = 4416, + SubgroupGeMask = 4417, + SubgroupGeMaskKHR = 4417, + SubgroupGtMask = 4418, + SubgroupGtMaskKHR = 4418, + SubgroupLeMask = 4419, + SubgroupLeMaskKHR = 4419, + SubgroupLtMask = 4420, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + BaryCoordNoPerspAMD = 4992, + BaryCoordNoPerspCentroidAMD = 4993, + BaryCoordNoPerspSampleAMD = 4994, + BaryCoordSmoothAMD = 4995, + BaryCoordSmoothCentroidAMD = 4996, + BaryCoordSmoothSampleAMD = 4997, + BaryCoordPullModelAMD = 4998, + FragStencilRefEXT = 5014, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + FullyCoveredEXT = 5264, + TaskCountNV = 5274, + PrimitiveCountNV = 5275, + PrimitiveIndicesNV = 5276, + ClipDistancePerViewNV = 5277, + CullDistancePerViewNV = 5278, + LayerPerViewNV = 5279, + MeshViewCountNV = 5280, + MeshViewIndicesNV = 5281, + BaryCoordNV = 5286, + BaryCoordNoPerspNV = 5287, + FragSizeEXT = 5292, + FragmentSizeNV = 5292, + FragInvocationCountEXT = 5293, + InvocationsPerPixelNV = 5293, + LaunchIdNV = 5319, + LaunchSizeNV = 5320, + WorldRayOriginNV = 5321, + WorldRayDirectionNV = 5322, + ObjectRayOriginNV = 5323, + ObjectRayDirectionNV = 5324, + RayTminNV = 5325, + RayTmaxNV = 5326, + InstanceCustomIndexNV = 5327, + ObjectToWorldNV = 5330, + WorldToObjectNV = 5331, + HitTNV = 5332, + HitKindNV = 5333, + IncomingRayFlagsNV = 5351, + } + + public enum SelectionControlShift + { + Flatten = 0, + DontFlatten = 1, + } + + public enum SelectionControlMask + { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, + } + + public enum LoopControlShift + { + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, + } + + public enum LoopControlMask + { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, + } + + public enum FunctionControlShift + { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + } + + public enum FunctionControlMask + { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, + } + + public enum MemorySemanticsShift + { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + OutputMemoryKHR = 12, + MakeAvailableKHR = 13, + MakeVisibleKHR = 14, + } + + public enum MemorySemanticsMask + { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + OutputMemoryKHR = 0x00001000, + MakeAvailableKHR = 0x00002000, + MakeVisibleKHR = 0x00004000, + } + + public enum MemoryAccessShift + { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + MakePointerAvailableKHR = 3, + MakePointerVisibleKHR = 4, + NonPrivatePointerKHR = 5, + } + + public enum MemoryAccessMask + { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + MakePointerAvailableKHR = 0x00000008, + MakePointerVisibleKHR = 0x00000010, + NonPrivatePointerKHR = 0x00000020, + } + + public enum Scope + { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + QueueFamilyKHR = 5, + } + + public enum GroupOperation + { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + ClusteredReduce = 3, + PartitionedReduceNV = 6, + PartitionedInclusiveScanNV = 7, + PartitionedExclusiveScanNV = 8, + } + + public enum KernelEnqueueFlags + { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + } + + public enum KernelProfilingInfoShift + { + CmdExecTime = 0, + } + + public enum KernelProfilingInfoMask + { + MaskNone = 0, + CmdExecTime = 0x00000001, + } + + public enum Capability + { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + GroupNonUniform = 61, + GroupNonUniformVote = 62, + GroupNonUniformArithmetic = 63, + GroupNonUniformBallot = 64, + GroupNonUniformShuffle = 65, + GroupNonUniformShuffleRelative = 66, + GroupNonUniformClustered = 67, + GroupNonUniformQuad = 68, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageBuffer16BitAccess = 4433, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + UniformAndStorageBuffer16BitAccess = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + VariablePointersStorageBuffer = 4441, + VariablePointers = 4442, + AtomicStorageOps = 4445, + SampleMaskPostDepthCoverage = 4447, + StorageBuffer8BitAccess = 4448, + UniformAndStorageBuffer8BitAccess = 4449, + StoragePushConstant8 = 4450, + DenormPreserve = 4464, + DenormFlushToZero = 4465, + SignedZeroInfNanPreserve = 4466, + RoundingModeRTE = 4467, + RoundingModeRTZ = 4468, + Float16ImageAMD = 5008, + ImageGatherBiasLodAMD = 5009, + FragmentMaskAMD = 5010, + StencilExportEXT = 5013, + ImageReadWriteLodAMD = 5015, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerEXT = 5254, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + FragmentFullyCoveredEXT = 5265, + MeshShadingNV = 5266, + ImageFootprintNV = 5282, + FragmentBarycentricNV = 5284, + ComputeDerivativeGroupQuadsNV = 5288, + FragmentDensityEXT = 5291, + ShadingRateNV = 5291, + GroupNonUniformPartitionedNV = 5297, + ShaderNonUniformEXT = 5301, + RuntimeDescriptorArrayEXT = 5302, + InputAttachmentArrayDynamicIndexingEXT = 5303, + UniformTexelBufferArrayDynamicIndexingEXT = 5304, + StorageTexelBufferArrayDynamicIndexingEXT = 5305, + UniformBufferArrayNonUniformIndexingEXT = 5306, + SampledImageArrayNonUniformIndexingEXT = 5307, + StorageBufferArrayNonUniformIndexingEXT = 5308, + StorageImageArrayNonUniformIndexingEXT = 5309, + InputAttachmentArrayNonUniformIndexingEXT = 5310, + UniformTexelBufferArrayNonUniformIndexingEXT = 5311, + StorageTexelBufferArrayNonUniformIndexingEXT = 5312, + RayTracingNV = 5340, + VulkanMemoryModelKHR = 5345, + VulkanMemoryModelDeviceScopeKHR = 5346, + ComputeDerivativeGroupLinearNV = 5350, + SubgroupShuffleINTEL = 5568, + SubgroupBufferBlockIOINTEL = 5569, + SubgroupImageBlockIOINTEL = 5570, + } + + public enum Op + { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpExecutionModeId = 331, + OpDecorateId = 332, + OpGroupNonUniformElect = 333, + OpGroupNonUniformAll = 334, + OpGroupNonUniformAny = 335, + OpGroupNonUniformAllEqual = 336, + OpGroupNonUniformBroadcast = 337, + OpGroupNonUniformBroadcastFirst = 338, + OpGroupNonUniformBallot = 339, + OpGroupNonUniformInverseBallot = 340, + OpGroupNonUniformBallotBitExtract = 341, + OpGroupNonUniformBallotBitCount = 342, + OpGroupNonUniformBallotFindLSB = 343, + OpGroupNonUniformBallotFindMSB = 344, + OpGroupNonUniformShuffle = 345, + OpGroupNonUniformShuffleXor = 346, + OpGroupNonUniformShuffleUp = 347, + OpGroupNonUniformShuffleDown = 348, + OpGroupNonUniformIAdd = 349, + OpGroupNonUniformFAdd = 350, + OpGroupNonUniformIMul = 351, + OpGroupNonUniformFMul = 352, + OpGroupNonUniformSMin = 353, + OpGroupNonUniformUMin = 354, + OpGroupNonUniformFMin = 355, + OpGroupNonUniformSMax = 356, + OpGroupNonUniformUMax = 357, + OpGroupNonUniformFMax = 358, + OpGroupNonUniformBitwiseAnd = 359, + OpGroupNonUniformBitwiseOr = 360, + OpGroupNonUniformBitwiseXor = 361, + OpGroupNonUniformLogicalAnd = 362, + OpGroupNonUniformLogicalOr = 363, + OpGroupNonUniformLogicalXor = 364, + OpGroupNonUniformQuadBroadcast = 365, + OpGroupNonUniformQuadSwap = 366, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpImageSampleFootprintNV = 5283, + OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateStringGOOGLE = 5633, + } + } +} + diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.h b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.h index 4c90c936c..d996f09fc 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.h +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2014-2018 The Khronos Group Inc. +** Copyright (c) 2014-2019 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a copy ** of this software and/or associated documentation files (the "Materials"), @@ -31,13 +31,16 @@ /* ** Enumeration tokens for SPIR-V, in various styles: -** C, C++, C++11, JSON, Lua, Python +** C, C++, C++11, JSON, Lua, Python, C#, D ** ** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL ** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL ** - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL ** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL ** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +** - C# will use enum classes in the Specification class located in the "Spv" namespace, +** e.g.: Spv.Specification.SourceLanguage.GLSL +** - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL ** ** Some tokens act like mask values, which can be OR'd together, ** while others are mutually exclusive. The mask-like ones have @@ -51,11 +54,11 @@ typedef unsigned int SpvId; #define SPV_VERSION 0x10300 -#define SPV_REVISION 1 +#define SPV_REVISION 6 static const unsigned int SpvMagicNumber = 0x07230203; static const unsigned int SpvVersion = 0x00010300; -static const unsigned int SpvRevision = 1; +static const unsigned int SpvRevision = 6; static const unsigned int SpvOpCodeMask = 0xffff; static const unsigned int SpvWordCountShift = 16; @@ -77,6 +80,14 @@ typedef enum SpvExecutionModel_ { SpvExecutionModelFragment = 4, SpvExecutionModelGLCompute = 5, SpvExecutionModelKernel = 6, + SpvExecutionModelTaskNV = 5267, + SpvExecutionModelMeshNV = 5268, + SpvExecutionModelRayGenerationNV = 5313, + SpvExecutionModelIntersectionNV = 5314, + SpvExecutionModelAnyHitNV = 5315, + SpvExecutionModelClosestHitNV = 5316, + SpvExecutionModelMissNV = 5317, + SpvExecutionModelCallableNV = 5318, SpvExecutionModelMax = 0x7fffffff, } SpvExecutionModel; @@ -91,6 +102,7 @@ typedef enum SpvMemoryModel_ { SpvMemoryModelSimple = 0, SpvMemoryModelGLSL450 = 1, SpvMemoryModelOpenCL = 2, + SpvMemoryModelVulkanKHR = 3, SpvMemoryModelMax = 0x7fffffff, } SpvMemoryModel; @@ -134,7 +146,17 @@ typedef enum SpvExecutionMode_ { SpvExecutionModeLocalSizeId = 38, SpvExecutionModeLocalSizeHintId = 39, SpvExecutionModePostDepthCoverage = 4446, + SpvExecutionModeDenormPreserve = 4459, + SpvExecutionModeDenormFlushToZero = 4460, + SpvExecutionModeSignedZeroInfNanPreserve = 4461, + SpvExecutionModeRoundingModeRTE = 4462, + SpvExecutionModeRoundingModeRTZ = 4463, SpvExecutionModeStencilRefReplacingEXT = 5027, + SpvExecutionModeOutputLinesNV = 5269, + SpvExecutionModeOutputPrimitivesNV = 5270, + SpvExecutionModeDerivativeGroupQuadsNV = 5289, + SpvExecutionModeDerivativeGroupLinearNV = 5290, + SpvExecutionModeOutputTrianglesNV = 5298, SpvExecutionModeMax = 0x7fffffff, } SpvExecutionMode; @@ -152,6 +174,12 @@ typedef enum SpvStorageClass_ { SpvStorageClassAtomicCounter = 10, SpvStorageClassImage = 11, SpvStorageClassStorageBuffer = 12, + SpvStorageClassCallableDataNV = 5328, + SpvStorageClassIncomingCallableDataNV = 5329, + SpvStorageClassRayPayloadNV = 5338, + SpvStorageClassHitAttributeNV = 5339, + SpvStorageClassIncomingRayPayloadNV = 5342, + SpvStorageClassShaderRecordBufferNV = 5343, SpvStorageClassMax = 0x7fffffff, } SpvStorageClass; @@ -279,6 +307,10 @@ typedef enum SpvImageOperandsShift_ { SpvImageOperandsConstOffsetsShift = 5, SpvImageOperandsSampleShift = 6, SpvImageOperandsMinLodShift = 7, + SpvImageOperandsMakeTexelAvailableKHRShift = 8, + SpvImageOperandsMakeTexelVisibleKHRShift = 9, + SpvImageOperandsNonPrivateTexelKHRShift = 10, + SpvImageOperandsVolatileTexelKHRShift = 11, SpvImageOperandsMax = 0x7fffffff, } SpvImageOperandsShift; @@ -292,6 +324,10 @@ typedef enum SpvImageOperandsMask_ { SpvImageOperandsConstOffsetsMask = 0x00000020, SpvImageOperandsSampleMask = 0x00000040, SpvImageOperandsMinLodMask = 0x00000080, + SpvImageOperandsMakeTexelAvailableKHRMask = 0x00000100, + SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200, + SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400, + SpvImageOperandsVolatileTexelKHRMask = 0x00000800, } SpvImageOperandsMask; typedef enum SpvFPFastMathModeShift_ { @@ -392,11 +428,17 @@ typedef enum SpvDecoration_ { SpvDecorationMaxByteOffset = 45, SpvDecorationAlignmentId = 46, SpvDecorationMaxByteOffsetId = 47, + SpvDecorationNoSignedWrap = 4469, + SpvDecorationNoUnsignedWrap = 4470, SpvDecorationExplicitInterpAMD = 4999, SpvDecorationOverrideCoverageNV = 5248, SpvDecorationPassthroughNV = 5250, SpvDecorationViewportRelativeNV = 5252, SpvDecorationSecondaryViewportRelativeNV = 5256, + SpvDecorationPerPrimitiveNV = 5271, + SpvDecorationPerViewNV = 5272, + SpvDecorationPerTaskNV = 5273, + SpvDecorationPerVertexNV = 5285, SpvDecorationNonUniformEXT = 5300, SpvDecorationHlslCounterBufferGOOGLE = 5634, SpvDecorationHlslSemanticGOOGLE = 5635, @@ -474,6 +516,34 @@ typedef enum SpvBuiltIn_ { SpvBuiltInPositionPerViewNV = 5261, SpvBuiltInViewportMaskPerViewNV = 5262, SpvBuiltInFullyCoveredEXT = 5264, + SpvBuiltInTaskCountNV = 5274, + SpvBuiltInPrimitiveCountNV = 5275, + SpvBuiltInPrimitiveIndicesNV = 5276, + SpvBuiltInClipDistancePerViewNV = 5277, + SpvBuiltInCullDistancePerViewNV = 5278, + SpvBuiltInLayerPerViewNV = 5279, + SpvBuiltInMeshViewCountNV = 5280, + SpvBuiltInMeshViewIndicesNV = 5281, + SpvBuiltInBaryCoordNV = 5286, + SpvBuiltInBaryCoordNoPerspNV = 5287, + SpvBuiltInFragSizeEXT = 5292, + SpvBuiltInFragmentSizeNV = 5292, + SpvBuiltInFragInvocationCountEXT = 5293, + SpvBuiltInInvocationsPerPixelNV = 5293, + SpvBuiltInLaunchIdNV = 5319, + SpvBuiltInLaunchSizeNV = 5320, + SpvBuiltInWorldRayOriginNV = 5321, + SpvBuiltInWorldRayDirectionNV = 5322, + SpvBuiltInObjectRayOriginNV = 5323, + SpvBuiltInObjectRayDirectionNV = 5324, + SpvBuiltInRayTminNV = 5325, + SpvBuiltInRayTmaxNV = 5326, + SpvBuiltInInstanceCustomIndexNV = 5327, + SpvBuiltInObjectToWorldNV = 5330, + SpvBuiltInWorldToObjectNV = 5331, + SpvBuiltInHitTNV = 5332, + SpvBuiltInHitKindNV = 5333, + SpvBuiltInIncomingRayFlagsNV = 5351, SpvBuiltInMax = 0x7fffffff, } SpvBuiltIn; @@ -532,6 +602,9 @@ typedef enum SpvMemorySemanticsShift_ { SpvMemorySemanticsCrossWorkgroupMemoryShift = 9, SpvMemorySemanticsAtomicCounterMemoryShift = 10, SpvMemorySemanticsImageMemoryShift = 11, + SpvMemorySemanticsOutputMemoryKHRShift = 12, + SpvMemorySemanticsMakeAvailableKHRShift = 13, + SpvMemorySemanticsMakeVisibleKHRShift = 14, SpvMemorySemanticsMax = 0x7fffffff, } SpvMemorySemanticsShift; @@ -547,12 +620,18 @@ typedef enum SpvMemorySemanticsMask_ { SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400, SpvMemorySemanticsImageMemoryMask = 0x00000800, + SpvMemorySemanticsOutputMemoryKHRMask = 0x00001000, + SpvMemorySemanticsMakeAvailableKHRMask = 0x00002000, + SpvMemorySemanticsMakeVisibleKHRMask = 0x00004000, } SpvMemorySemanticsMask; typedef enum SpvMemoryAccessShift_ { SpvMemoryAccessVolatileShift = 0, SpvMemoryAccessAlignedShift = 1, SpvMemoryAccessNontemporalShift = 2, + SpvMemoryAccessMakePointerAvailableKHRShift = 3, + SpvMemoryAccessMakePointerVisibleKHRShift = 4, + SpvMemoryAccessNonPrivatePointerKHRShift = 5, SpvMemoryAccessMax = 0x7fffffff, } SpvMemoryAccessShift; @@ -561,6 +640,9 @@ typedef enum SpvMemoryAccessMask_ { SpvMemoryAccessVolatileMask = 0x00000001, SpvMemoryAccessAlignedMask = 0x00000002, SpvMemoryAccessNontemporalMask = 0x00000004, + SpvMemoryAccessMakePointerAvailableKHRMask = 0x00000008, + SpvMemoryAccessMakePointerVisibleKHRMask = 0x00000010, + SpvMemoryAccessNonPrivatePointerKHRMask = 0x00000020, } SpvMemoryAccessMask; typedef enum SpvScope_ { @@ -569,6 +651,7 @@ typedef enum SpvScope_ { SpvScopeWorkgroup = 2, SpvScopeSubgroup = 3, SpvScopeInvocation = 4, + SpvScopeQueueFamilyKHR = 5, SpvScopeMax = 0x7fffffff, } SpvScope; @@ -686,6 +769,11 @@ typedef enum SpvCapability_ { SpvCapabilityStorageBuffer8BitAccess = 4448, SpvCapabilityUniformAndStorageBuffer8BitAccess = 4449, SpvCapabilityStoragePushConstant8 = 4450, + SpvCapabilityDenormPreserve = 4464, + SpvCapabilityDenormFlushToZero = 4465, + SpvCapabilitySignedZeroInfNanPreserve = 4466, + SpvCapabilityRoundingModeRTE = 4467, + SpvCapabilityRoundingModeRTZ = 4468, SpvCapabilityFloat16ImageAMD = 5008, SpvCapabilityImageGatherBiasLodAMD = 5009, SpvCapabilityFragmentMaskAMD = 5010, @@ -699,6 +787,12 @@ typedef enum SpvCapability_ { SpvCapabilityShaderStereoViewNV = 5259, SpvCapabilityPerViewAttributesNV = 5260, SpvCapabilityFragmentFullyCoveredEXT = 5265, + SpvCapabilityMeshShadingNV = 5266, + SpvCapabilityImageFootprintNV = 5282, + SpvCapabilityFragmentBarycentricNV = 5284, + SpvCapabilityComputeDerivativeGroupQuadsNV = 5288, + SpvCapabilityFragmentDensityEXT = 5291, + SpvCapabilityShadingRateNV = 5291, SpvCapabilityGroupNonUniformPartitionedNV = 5297, SpvCapabilityShaderNonUniformEXT = 5301, SpvCapabilityRuntimeDescriptorArrayEXT = 5302, @@ -712,6 +806,10 @@ typedef enum SpvCapability_ { SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, + SpvCapabilityRayTracingNV = 5340, + SpvCapabilityVulkanMemoryModelKHR = 5345, + SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346, + SpvCapabilityComputeDerivativeGroupLinearNV = 5350, SpvCapabilitySubgroupShuffleINTEL = 5568, SpvCapabilitySubgroupBufferBlockIOINTEL = 5569, SpvCapabilitySubgroupImageBlockIOINTEL = 5570, @@ -1075,7 +1173,15 @@ typedef enum SpvOp_ { SpvOpGroupSMaxNonUniformAMD = 5007, SpvOpFragmentMaskFetchAMD = 5011, SpvOpFragmentFetchAMD = 5012, + SpvOpImageSampleFootprintNV = 5283, SpvOpGroupNonUniformPartitionNV = 5296, + SpvOpWritePackedPrimitiveIndices4x8NV = 5299, + SpvOpReportIntersectionNV = 5334, + SpvOpIgnoreIntersectionNV = 5335, + SpvOpTerminateRayNV = 5336, + SpvOpTraceNV = 5337, + SpvOpTypeAccelerationStructureNV = 5341, + SpvOpExecuteCallableNV = 5344, SpvOpSubgroupShuffleINTEL = 5571, SpvOpSubgroupShuffleDownINTEL = 5572, SpvOpSubgroupShuffleUpINTEL = 5573, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp index f16c2963e..9100356ab 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright (c) 2014-2019 The Khronos Group Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), @@ -26,13 +26,16 @@ // the Binary Section of the SPIR-V specification. // Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python +// C, C++, C++11, JSON, Lua, Python, C#, D // // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL // - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL // - Lua will use tables, e.g.: spv.SourceLanguage.GLSL // - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, +// e.g.: Spv.Specification.SourceLanguage.GLSL +// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL // // Some tokens act like mask values, which can be OR'd together, // while others are mutually exclusive. The mask-like ones have @@ -47,11 +50,11 @@ namespace spv { typedef unsigned int Id; #define SPV_VERSION 0x10300 -#define SPV_REVISION 1 +#define SPV_REVISION 6 static const unsigned int MagicNumber = 0x07230203; static const unsigned int Version = 0x00010300; -static const unsigned int Revision = 1; +static const unsigned int Revision = 6; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -73,6 +76,14 @@ enum ExecutionModel { ExecutionModelFragment = 4, ExecutionModelGLCompute = 5, ExecutionModelKernel = 6, + ExecutionModelTaskNV = 5267, + ExecutionModelMeshNV = 5268, + ExecutionModelRayGenerationNV = 5313, + ExecutionModelIntersectionNV = 5314, + ExecutionModelAnyHitNV = 5315, + ExecutionModelClosestHitNV = 5316, + ExecutionModelMissNV = 5317, + ExecutionModelCallableNV = 5318, ExecutionModelMax = 0x7fffffff, }; @@ -87,6 +98,7 @@ enum MemoryModel { MemoryModelSimple = 0, MemoryModelGLSL450 = 1, MemoryModelOpenCL = 2, + MemoryModelVulkanKHR = 3, MemoryModelMax = 0x7fffffff, }; @@ -130,7 +142,17 @@ enum ExecutionMode { ExecutionModeLocalSizeId = 38, ExecutionModeLocalSizeHintId = 39, ExecutionModePostDepthCoverage = 4446, + ExecutionModeDenormPreserve = 4459, + ExecutionModeDenormFlushToZero = 4460, + ExecutionModeSignedZeroInfNanPreserve = 4461, + ExecutionModeRoundingModeRTE = 4462, + ExecutionModeRoundingModeRTZ = 4463, ExecutionModeStencilRefReplacingEXT = 5027, + ExecutionModeOutputLinesNV = 5269, + ExecutionModeOutputPrimitivesNV = 5270, + ExecutionModeDerivativeGroupQuadsNV = 5289, + ExecutionModeDerivativeGroupLinearNV = 5290, + ExecutionModeOutputTrianglesNV = 5298, ExecutionModeMax = 0x7fffffff, }; @@ -148,6 +170,12 @@ enum StorageClass { StorageClassAtomicCounter = 10, StorageClassImage = 11, StorageClassStorageBuffer = 12, + StorageClassCallableDataNV = 5328, + StorageClassIncomingCallableDataNV = 5329, + StorageClassRayPayloadNV = 5338, + StorageClassHitAttributeNV = 5339, + StorageClassIncomingRayPayloadNV = 5342, + StorageClassShaderRecordBufferNV = 5343, StorageClassMax = 0x7fffffff, }; @@ -275,6 +303,10 @@ enum ImageOperandsShift { ImageOperandsConstOffsetsShift = 5, ImageOperandsSampleShift = 6, ImageOperandsMinLodShift = 7, + ImageOperandsMakeTexelAvailableKHRShift = 8, + ImageOperandsMakeTexelVisibleKHRShift = 9, + ImageOperandsNonPrivateTexelKHRShift = 10, + ImageOperandsVolatileTexelKHRShift = 11, ImageOperandsMax = 0x7fffffff, }; @@ -288,6 +320,10 @@ enum ImageOperandsMask { ImageOperandsConstOffsetsMask = 0x00000020, ImageOperandsSampleMask = 0x00000040, ImageOperandsMinLodMask = 0x00000080, + ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, + ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, + ImageOperandsNonPrivateTexelKHRMask = 0x00000400, + ImageOperandsVolatileTexelKHRMask = 0x00000800, }; enum FPFastMathModeShift { @@ -388,11 +424,17 @@ enum Decoration { DecorationMaxByteOffset = 45, DecorationAlignmentId = 46, DecorationMaxByteOffsetId = 47, + DecorationNoSignedWrap = 4469, + DecorationNoUnsignedWrap = 4470, DecorationExplicitInterpAMD = 4999, DecorationOverrideCoverageNV = 5248, DecorationPassthroughNV = 5250, DecorationViewportRelativeNV = 5252, DecorationSecondaryViewportRelativeNV = 5256, + DecorationPerPrimitiveNV = 5271, + DecorationPerViewNV = 5272, + DecorationPerTaskNV = 5273, + DecorationPerVertexNV = 5285, DecorationNonUniformEXT = 5300, DecorationHlslCounterBufferGOOGLE = 5634, DecorationHlslSemanticGOOGLE = 5635, @@ -470,6 +512,34 @@ enum BuiltIn { BuiltInPositionPerViewNV = 5261, BuiltInViewportMaskPerViewNV = 5262, BuiltInFullyCoveredEXT = 5264, + BuiltInTaskCountNV = 5274, + BuiltInPrimitiveCountNV = 5275, + BuiltInPrimitiveIndicesNV = 5276, + BuiltInClipDistancePerViewNV = 5277, + BuiltInCullDistancePerViewNV = 5278, + BuiltInLayerPerViewNV = 5279, + BuiltInMeshViewCountNV = 5280, + BuiltInMeshViewIndicesNV = 5281, + BuiltInBaryCoordNV = 5286, + BuiltInBaryCoordNoPerspNV = 5287, + BuiltInFragSizeEXT = 5292, + BuiltInFragmentSizeNV = 5292, + BuiltInFragInvocationCountEXT = 5293, + BuiltInInvocationsPerPixelNV = 5293, + BuiltInLaunchIdNV = 5319, + BuiltInLaunchSizeNV = 5320, + BuiltInWorldRayOriginNV = 5321, + BuiltInWorldRayDirectionNV = 5322, + BuiltInObjectRayOriginNV = 5323, + BuiltInObjectRayDirectionNV = 5324, + BuiltInRayTminNV = 5325, + BuiltInRayTmaxNV = 5326, + BuiltInInstanceCustomIndexNV = 5327, + BuiltInObjectToWorldNV = 5330, + BuiltInWorldToObjectNV = 5331, + BuiltInHitTNV = 5332, + BuiltInHitKindNV = 5333, + BuiltInIncomingRayFlagsNV = 5351, BuiltInMax = 0x7fffffff, }; @@ -528,6 +598,9 @@ enum MemorySemanticsShift { MemorySemanticsCrossWorkgroupMemoryShift = 9, MemorySemanticsAtomicCounterMemoryShift = 10, MemorySemanticsImageMemoryShift = 11, + MemorySemanticsOutputMemoryKHRShift = 12, + MemorySemanticsMakeAvailableKHRShift = 13, + MemorySemanticsMakeVisibleKHRShift = 14, MemorySemanticsMax = 0x7fffffff, }; @@ -543,12 +616,18 @@ enum MemorySemanticsMask { MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, MemorySemanticsAtomicCounterMemoryMask = 0x00000400, MemorySemanticsImageMemoryMask = 0x00000800, + MemorySemanticsOutputMemoryKHRMask = 0x00001000, + MemorySemanticsMakeAvailableKHRMask = 0x00002000, + MemorySemanticsMakeVisibleKHRMask = 0x00004000, }; enum MemoryAccessShift { MemoryAccessVolatileShift = 0, MemoryAccessAlignedShift = 1, MemoryAccessNontemporalShift = 2, + MemoryAccessMakePointerAvailableKHRShift = 3, + MemoryAccessMakePointerVisibleKHRShift = 4, + MemoryAccessNonPrivatePointerKHRShift = 5, MemoryAccessMax = 0x7fffffff, }; @@ -557,6 +636,9 @@ enum MemoryAccessMask { MemoryAccessVolatileMask = 0x00000001, MemoryAccessAlignedMask = 0x00000002, MemoryAccessNontemporalMask = 0x00000004, + MemoryAccessMakePointerAvailableKHRMask = 0x00000008, + MemoryAccessMakePointerVisibleKHRMask = 0x00000010, + MemoryAccessNonPrivatePointerKHRMask = 0x00000020, }; enum Scope { @@ -565,6 +647,7 @@ enum Scope { ScopeWorkgroup = 2, ScopeSubgroup = 3, ScopeInvocation = 4, + ScopeQueueFamilyKHR = 5, ScopeMax = 0x7fffffff, }; @@ -682,6 +765,11 @@ enum Capability { CapabilityStorageBuffer8BitAccess = 4448, CapabilityUniformAndStorageBuffer8BitAccess = 4449, CapabilityStoragePushConstant8 = 4450, + CapabilityDenormPreserve = 4464, + CapabilityDenormFlushToZero = 4465, + CapabilitySignedZeroInfNanPreserve = 4466, + CapabilityRoundingModeRTE = 4467, + CapabilityRoundingModeRTZ = 4468, CapabilityFloat16ImageAMD = 5008, CapabilityImageGatherBiasLodAMD = 5009, CapabilityFragmentMaskAMD = 5010, @@ -695,6 +783,12 @@ enum Capability { CapabilityShaderStereoViewNV = 5259, CapabilityPerViewAttributesNV = 5260, CapabilityFragmentFullyCoveredEXT = 5265, + CapabilityMeshShadingNV = 5266, + CapabilityImageFootprintNV = 5282, + CapabilityFragmentBarycentricNV = 5284, + CapabilityComputeDerivativeGroupQuadsNV = 5288, + CapabilityFragmentDensityEXT = 5291, + CapabilityShadingRateNV = 5291, CapabilityGroupNonUniformPartitionedNV = 5297, CapabilityShaderNonUniformEXT = 5301, CapabilityRuntimeDescriptorArrayEXT = 5302, @@ -708,6 +802,10 @@ enum Capability { CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, + CapabilityRayTracingNV = 5340, + CapabilityVulkanMemoryModelKHR = 5345, + CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, + CapabilityComputeDerivativeGroupLinearNV = 5350, CapabilitySubgroupShuffleINTEL = 5568, CapabilitySubgroupBufferBlockIOINTEL = 5569, CapabilitySubgroupImageBlockIOINTEL = 5570, @@ -1071,7 +1169,15 @@ enum Op { OpGroupSMaxNonUniformAMD = 5007, OpFragmentMaskFetchAMD = 5011, OpFragmentFetchAMD = 5012, + OpImageSampleFootprintNV = 5283, OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, OpSubgroupShuffleINTEL = 5571, OpSubgroupShuffleDownINTEL = 5572, OpSubgroupShuffleUpINTEL = 5573, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp11 b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp11 index 3bd5b8a0d..bc7ecaabf 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp11 +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.hpp11 @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright (c) 2014-2019 The Khronos Group Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), @@ -26,13 +26,16 @@ // the Binary Section of the SPIR-V specification. // Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python +// C, C++, C++11, JSON, Lua, Python, C#, D // // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL // - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL // - Lua will use tables, e.g.: spv.SourceLanguage.GLSL // - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, +// e.g.: Spv.Specification.SourceLanguage.GLSL +// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL // // Some tokens act like mask values, which can be OR'd together, // while others are mutually exclusive. The mask-like ones have @@ -47,11 +50,11 @@ namespace spv { typedef unsigned int Id; #define SPV_VERSION 0x10300 -#define SPV_REVISION 1 +#define SPV_REVISION 6 static const unsigned int MagicNumber = 0x07230203; static const unsigned int Version = 0x00010300; -static const unsigned int Revision = 1; +static const unsigned int Revision = 6; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -73,6 +76,14 @@ enum class ExecutionModel : unsigned { Fragment = 4, GLCompute = 5, Kernel = 6, + TaskNV = 5267, + MeshNV = 5268, + RayGenerationNV = 5313, + IntersectionNV = 5314, + AnyHitNV = 5315, + ClosestHitNV = 5316, + MissNV = 5317, + CallableNV = 5318, Max = 0x7fffffff, }; @@ -87,6 +98,7 @@ enum class MemoryModel : unsigned { Simple = 0, GLSL450 = 1, OpenCL = 2, + VulkanKHR = 3, Max = 0x7fffffff, }; @@ -130,7 +142,17 @@ enum class ExecutionMode : unsigned { LocalSizeId = 38, LocalSizeHintId = 39, PostDepthCoverage = 4446, + DenormPreserve = 4459, + DenormFlushToZero = 4460, + SignedZeroInfNanPreserve = 4461, + RoundingModeRTE = 4462, + RoundingModeRTZ = 4463, StencilRefReplacingEXT = 5027, + OutputLinesNV = 5269, + OutputPrimitivesNV = 5270, + DerivativeGroupQuadsNV = 5289, + DerivativeGroupLinearNV = 5290, + OutputTrianglesNV = 5298, Max = 0x7fffffff, }; @@ -148,6 +170,12 @@ enum class StorageClass : unsigned { AtomicCounter = 10, Image = 11, StorageBuffer = 12, + CallableDataNV = 5328, + IncomingCallableDataNV = 5329, + RayPayloadNV = 5338, + HitAttributeNV = 5339, + IncomingRayPayloadNV = 5342, + ShaderRecordBufferNV = 5343, Max = 0x7fffffff, }; @@ -275,6 +303,10 @@ enum class ImageOperandsShift : unsigned { ConstOffsets = 5, Sample = 6, MinLod = 7, + MakeTexelAvailableKHR = 8, + MakeTexelVisibleKHR = 9, + NonPrivateTexelKHR = 10, + VolatileTexelKHR = 11, Max = 0x7fffffff, }; @@ -288,6 +320,10 @@ enum class ImageOperandsMask : unsigned { ConstOffsets = 0x00000020, Sample = 0x00000040, MinLod = 0x00000080, + MakeTexelAvailableKHR = 0x00000100, + MakeTexelVisibleKHR = 0x00000200, + NonPrivateTexelKHR = 0x00000400, + VolatileTexelKHR = 0x00000800, }; enum class FPFastMathModeShift : unsigned { @@ -388,11 +424,17 @@ enum class Decoration : unsigned { MaxByteOffset = 45, AlignmentId = 46, MaxByteOffsetId = 47, + NoSignedWrap = 4469, + NoUnsignedWrap = 4470, ExplicitInterpAMD = 4999, OverrideCoverageNV = 5248, PassthroughNV = 5250, ViewportRelativeNV = 5252, SecondaryViewportRelativeNV = 5256, + PerPrimitiveNV = 5271, + PerViewNV = 5272, + PerTaskNV = 5273, + PerVertexNV = 5285, NonUniformEXT = 5300, HlslCounterBufferGOOGLE = 5634, HlslSemanticGOOGLE = 5635, @@ -470,6 +512,34 @@ enum class BuiltIn : unsigned { PositionPerViewNV = 5261, ViewportMaskPerViewNV = 5262, FullyCoveredEXT = 5264, + TaskCountNV = 5274, + PrimitiveCountNV = 5275, + PrimitiveIndicesNV = 5276, + ClipDistancePerViewNV = 5277, + CullDistancePerViewNV = 5278, + LayerPerViewNV = 5279, + MeshViewCountNV = 5280, + MeshViewIndicesNV = 5281, + BaryCoordNV = 5286, + BaryCoordNoPerspNV = 5287, + FragSizeEXT = 5292, + FragmentSizeNV = 5292, + FragInvocationCountEXT = 5293, + InvocationsPerPixelNV = 5293, + LaunchIdNV = 5319, + LaunchSizeNV = 5320, + WorldRayOriginNV = 5321, + WorldRayDirectionNV = 5322, + ObjectRayOriginNV = 5323, + ObjectRayDirectionNV = 5324, + RayTminNV = 5325, + RayTmaxNV = 5326, + InstanceCustomIndexNV = 5327, + ObjectToWorldNV = 5330, + WorldToObjectNV = 5331, + HitTNV = 5332, + HitKindNV = 5333, + IncomingRayFlagsNV = 5351, Max = 0x7fffffff, }; @@ -528,6 +598,9 @@ enum class MemorySemanticsShift : unsigned { CrossWorkgroupMemory = 9, AtomicCounterMemory = 10, ImageMemory = 11, + OutputMemoryKHR = 12, + MakeAvailableKHR = 13, + MakeVisibleKHR = 14, Max = 0x7fffffff, }; @@ -543,12 +616,18 @@ enum class MemorySemanticsMask : unsigned { CrossWorkgroupMemory = 0x00000200, AtomicCounterMemory = 0x00000400, ImageMemory = 0x00000800, + OutputMemoryKHR = 0x00001000, + MakeAvailableKHR = 0x00002000, + MakeVisibleKHR = 0x00004000, }; enum class MemoryAccessShift : unsigned { Volatile = 0, Aligned = 1, Nontemporal = 2, + MakePointerAvailableKHR = 3, + MakePointerVisibleKHR = 4, + NonPrivatePointerKHR = 5, Max = 0x7fffffff, }; @@ -557,6 +636,9 @@ enum class MemoryAccessMask : unsigned { Volatile = 0x00000001, Aligned = 0x00000002, Nontemporal = 0x00000004, + MakePointerAvailableKHR = 0x00000008, + MakePointerVisibleKHR = 0x00000010, + NonPrivatePointerKHR = 0x00000020, }; enum class Scope : unsigned { @@ -565,6 +647,7 @@ enum class Scope : unsigned { Workgroup = 2, Subgroup = 3, Invocation = 4, + QueueFamilyKHR = 5, Max = 0x7fffffff, }; @@ -682,6 +765,11 @@ enum class Capability : unsigned { StorageBuffer8BitAccess = 4448, UniformAndStorageBuffer8BitAccess = 4449, StoragePushConstant8 = 4450, + DenormPreserve = 4464, + DenormFlushToZero = 4465, + SignedZeroInfNanPreserve = 4466, + RoundingModeRTE = 4467, + RoundingModeRTZ = 4468, Float16ImageAMD = 5008, ImageGatherBiasLodAMD = 5009, FragmentMaskAMD = 5010, @@ -695,6 +783,12 @@ enum class Capability : unsigned { ShaderStereoViewNV = 5259, PerViewAttributesNV = 5260, FragmentFullyCoveredEXT = 5265, + MeshShadingNV = 5266, + ImageFootprintNV = 5282, + FragmentBarycentricNV = 5284, + ComputeDerivativeGroupQuadsNV = 5288, + FragmentDensityEXT = 5291, + ShadingRateNV = 5291, GroupNonUniformPartitionedNV = 5297, ShaderNonUniformEXT = 5301, RuntimeDescriptorArrayEXT = 5302, @@ -708,6 +802,10 @@ enum class Capability : unsigned { InputAttachmentArrayNonUniformIndexingEXT = 5310, UniformTexelBufferArrayNonUniformIndexingEXT = 5311, StorageTexelBufferArrayNonUniformIndexingEXT = 5312, + RayTracingNV = 5340, + VulkanMemoryModelKHR = 5345, + VulkanMemoryModelDeviceScopeKHR = 5346, + ComputeDerivativeGroupLinearNV = 5350, SubgroupShuffleINTEL = 5568, SubgroupBufferBlockIOINTEL = 5569, SubgroupImageBlockIOINTEL = 5570, @@ -1071,7 +1169,15 @@ enum class Op : unsigned { OpGroupSMaxNonUniformAMD = 5007, OpFragmentMaskFetchAMD = 5011, OpFragmentFetchAMD = 5012, + OpImageSampleFootprintNV = 5283, OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, OpSubgroupShuffleINTEL = 5571, OpSubgroupShuffleDownINTEL = 5572, OpSubgroupShuffleUpINTEL = 5573, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.json b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.json index a592dfa23..11fd7a4bc 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.json +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.json @@ -6,7 +6,7 @@ "Comment": [ [ - "Copyright (c) 2014-2018 The Khronos Group Inc.", + "Copyright (c) 2014-2019 The Khronos Group Inc.", "", "Permission is hereby granted, free of charge, to any person obtaining a copy", "of this software and/or associated documentation files (the \"Materials\"),", @@ -36,13 +36,16 @@ ], [ "Enumeration tokens for SPIR-V, in various styles:", - " C, C++, C++11, JSON, Lua, Python", + " C, C++, C++11, JSON, Lua, Python, C#, D", "", "- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL", "- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL", "- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL", "- Lua will use tables, e.g.: spv.SourceLanguage.GLSL", "- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']", + "- C# will use enum classes in the Specification class located in the \"Spv\" namespace,", + " e.g.: Spv.Specification.SourceLanguage.GLSL", + "- D will have tokens under the \"spv\" module, e.g: spv.SourceLanguage.GLSL", "", "Some tokens act like mask values, which can be OR'd together,", "while others are mutually exclusive. The mask-like ones have", @@ -52,7 +55,7 @@ ], "MagicNumber": 119734787, "Version": 66304, - "Revision": 1, + "Revision": 6, "OpCodeMask": 65535, "WordCountShift": 16 }, @@ -82,7 +85,15 @@ "Geometry": 3, "Fragment": 4, "GLCompute": 5, - "Kernel": 6 + "Kernel": 6, + "TaskNV": 5267, + "MeshNV": 5268, + "RayGenerationNV": 5313, + "IntersectionNV": 5314, + "AnyHitNV": 5315, + "ClosestHitNV": 5316, + "MissNV": 5317, + "CallableNV": 5318 } }, { @@ -102,7 +113,8 @@ { "Simple": 0, "GLSL450": 1, - "OpenCL": 2 + "OpenCL": 2, + "VulkanKHR": 3 } }, { @@ -149,7 +161,17 @@ "LocalSizeId": 38, "LocalSizeHintId": 39, "PostDepthCoverage": 4446, - "StencilRefReplacingEXT": 5027 + "DenormPreserve": 4459, + "DenormFlushToZero": 4460, + "SignedZeroInfNanPreserve": 4461, + "RoundingModeRTE": 4462, + "RoundingModeRTZ": 4463, + "StencilRefReplacingEXT": 5027, + "OutputLinesNV": 5269, + "OutputPrimitivesNV": 5270, + "DerivativeGroupQuadsNV": 5289, + "DerivativeGroupLinearNV": 5290, + "OutputTrianglesNV": 5298 } }, { @@ -169,7 +191,13 @@ "PushConstant": 9, "AtomicCounter": 10, "Image": 11, - "StorageBuffer": 12 + "StorageBuffer": 12, + "CallableDataNV": 5328, + "IncomingCallableDataNV": 5329, + "RayPayloadNV": 5338, + "HitAttributeNV": 5339, + "IncomingRayPayloadNV": 5342, + "ShaderRecordBufferNV": 5343 } }, { @@ -317,7 +345,11 @@ "Offset": 4, "ConstOffsets": 5, "Sample": 6, - "MinLod": 7 + "MinLod": 7, + "MakeTexelAvailableKHR": 8, + "MakeTexelVisibleKHR": 9, + "NonPrivateTexelKHR": 10, + "VolatileTexelKHR": 11 } }, { @@ -428,11 +460,17 @@ "MaxByteOffset": 45, "AlignmentId": 46, "MaxByteOffsetId": 47, + "NoSignedWrap": 4469, + "NoUnsignedWrap": 4470, "ExplicitInterpAMD": 4999, "OverrideCoverageNV": 5248, "PassthroughNV": 5250, "ViewportRelativeNV": 5252, "SecondaryViewportRelativeNV": 5256, + "PerPrimitiveNV": 5271, + "PerViewNV": 5272, + "PerTaskNV": 5273, + "PerVertexNV": 5285, "NonUniformEXT": 5300, "HlslCounterBufferGOOGLE": 5634, "HlslSemanticGOOGLE": 5635 @@ -512,7 +550,35 @@ "SecondaryViewportMaskNV": 5258, "PositionPerViewNV": 5261, "ViewportMaskPerViewNV": 5262, - "FullyCoveredEXT": 5264 + "FullyCoveredEXT": 5264, + "TaskCountNV": 5274, + "PrimitiveCountNV": 5275, + "PrimitiveIndicesNV": 5276, + "ClipDistancePerViewNV": 5277, + "CullDistancePerViewNV": 5278, + "LayerPerViewNV": 5279, + "MeshViewCountNV": 5280, + "MeshViewIndicesNV": 5281, + "BaryCoordNV": 5286, + "BaryCoordNoPerspNV": 5287, + "FragSizeEXT": 5292, + "FragmentSizeNV": 5292, + "FragInvocationCountEXT": 5293, + "InvocationsPerPixelNV": 5293, + "LaunchIdNV": 5319, + "LaunchSizeNV": 5320, + "WorldRayOriginNV": 5321, + "WorldRayDirectionNV": 5322, + "ObjectRayOriginNV": 5323, + "ObjectRayDirectionNV": 5324, + "RayTminNV": 5325, + "RayTmaxNV": 5326, + "InstanceCustomIndexNV": 5327, + "ObjectToWorldNV": 5330, + "WorldToObjectNV": 5331, + "HitTNV": 5332, + "HitKindNV": 5333, + "IncomingRayFlagsNV": 5351 } }, { @@ -560,7 +626,10 @@ "WorkgroupMemory": 8, "CrossWorkgroupMemory": 9, "AtomicCounterMemory": 10, - "ImageMemory": 11 + "ImageMemory": 11, + "OutputMemoryKHR": 12, + "MakeAvailableKHR": 13, + "MakeVisibleKHR": 14 } }, { @@ -570,7 +639,10 @@ { "Volatile": 0, "Aligned": 1, - "Nontemporal": 2 + "Nontemporal": 2, + "MakePointerAvailableKHR": 3, + "MakePointerVisibleKHR": 4, + "NonPrivatePointerKHR": 5 } }, { @@ -582,7 +654,8 @@ "Device": 1, "Workgroup": 2, "Subgroup": 3, - "Invocation": 4 + "Invocation": 4, + "QueueFamilyKHR": 5 } }, { @@ -707,6 +780,11 @@ "StorageBuffer8BitAccess": 4448, "UniformAndStorageBuffer8BitAccess": 4449, "StoragePushConstant8": 4450, + "DenormPreserve": 4464, + "DenormFlushToZero": 4465, + "SignedZeroInfNanPreserve": 4466, + "RoundingModeRTE": 4467, + "RoundingModeRTZ": 4468, "Float16ImageAMD": 5008, "ImageGatherBiasLodAMD": 5009, "FragmentMaskAMD": 5010, @@ -720,6 +798,12 @@ "ShaderStereoViewNV": 5259, "PerViewAttributesNV": 5260, "FragmentFullyCoveredEXT": 5265, + "MeshShadingNV": 5266, + "ImageFootprintNV": 5282, + "FragmentBarycentricNV": 5284, + "ComputeDerivativeGroupQuadsNV": 5288, + "FragmentDensityEXT": 5291, + "ShadingRateNV": 5291, "GroupNonUniformPartitionedNV": 5297, "ShaderNonUniformEXT": 5301, "RuntimeDescriptorArrayEXT": 5302, @@ -733,6 +817,10 @@ "InputAttachmentArrayNonUniformIndexingEXT": 5310, "UniformTexelBufferArrayNonUniformIndexingEXT": 5311, "StorageTexelBufferArrayNonUniformIndexingEXT": 5312, + "RayTracingNV": 5340, + "VulkanMemoryModelKHR": 5345, + "VulkanMemoryModelDeviceScopeKHR": 5346, + "ComputeDerivativeGroupLinearNV": 5350, "SubgroupShuffleINTEL": 5568, "SubgroupBufferBlockIOINTEL": 5569, "SubgroupImageBlockIOINTEL": 5570 @@ -1099,7 +1187,15 @@ "OpGroupSMaxNonUniformAMD": 5007, "OpFragmentMaskFetchAMD": 5011, "OpFragmentFetchAMD": 5012, + "OpImageSampleFootprintNV": 5283, "OpGroupNonUniformPartitionNV": 5296, + "OpWritePackedPrimitiveIndices4x8NV": 5299, + "OpReportIntersectionNV": 5334, + "OpIgnoreIntersectionNV": 5335, + "OpTerminateRayNV": 5336, + "OpTraceNV": 5337, + "OpTypeAccelerationStructureNV": 5341, + "OpExecuteCallableNV": 5344, "OpSubgroupShuffleINTEL": 5571, "OpSubgroupShuffleDownINTEL": 5572, "OpSubgroupShuffleUpINTEL": 5573, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.lua b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.lua index 43e9ba5be..29644450c 100644 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.lua +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.lua @@ -1,4 +1,4 @@ --- Copyright (c) 2014-2018 The Khronos Group Inc. +-- Copyright (c) 2014-2019 The Khronos Group Inc. -- -- Permission is hereby granted, free of charge, to any person obtaining a copy -- of this software and/or associated documentation files (the "Materials"), @@ -26,13 +26,16 @@ -- the Binary Section of the SPIR-V specification. -- Enumeration tokens for SPIR-V, in various styles: --- C, C++, C++11, JSON, Lua, Python +-- C, C++, C++11, JSON, Lua, Python, C#, D -- -- - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -- - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -- - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -- - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -- - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +-- - C# will use enum classes in the Specification class located in the "Spv" namespace, +-- e.g.: Spv.Specification.SourceLanguage.GLSL +-- - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -- -- Some tokens act like mask values, which can be OR'd together, -- while others are mutually exclusive. The mask-like ones have @@ -42,7 +45,7 @@ spv = { MagicNumber = 0x07230203, Version = 0x00010300, - Revision = 1, + Revision = 6, OpCodeMask = 0xffff, WordCountShift = 16, @@ -63,6 +66,14 @@ spv = { Fragment = 4, GLCompute = 5, Kernel = 6, + TaskNV = 5267, + MeshNV = 5268, + RayGenerationNV = 5313, + IntersectionNV = 5314, + AnyHitNV = 5315, + ClosestHitNV = 5316, + MissNV = 5317, + CallableNV = 5318, }, AddressingModel = { @@ -75,6 +86,7 @@ spv = { Simple = 0, GLSL450 = 1, OpenCL = 2, + VulkanKHR = 3, }, ExecutionMode = { @@ -117,7 +129,17 @@ spv = { LocalSizeId = 38, LocalSizeHintId = 39, PostDepthCoverage = 4446, + DenormPreserve = 4459, + DenormFlushToZero = 4460, + SignedZeroInfNanPreserve = 4461, + RoundingModeRTE = 4462, + RoundingModeRTZ = 4463, StencilRefReplacingEXT = 5027, + OutputLinesNV = 5269, + OutputPrimitivesNV = 5270, + DerivativeGroupQuadsNV = 5289, + DerivativeGroupLinearNV = 5290, + OutputTrianglesNV = 5298, }, StorageClass = { @@ -134,6 +156,12 @@ spv = { AtomicCounter = 10, Image = 11, StorageBuffer = 12, + CallableDataNV = 5328, + IncomingCallableDataNV = 5329, + RayPayloadNV = 5338, + HitAttributeNV = 5339, + IncomingRayPayloadNV = 5342, + ShaderRecordBufferNV = 5343, }, Dim = { @@ -254,6 +282,10 @@ spv = { ConstOffsets = 5, Sample = 6, MinLod = 7, + MakeTexelAvailableKHR = 8, + MakeTexelVisibleKHR = 9, + NonPrivateTexelKHR = 10, + VolatileTexelKHR = 11, }, ImageOperandsMask = { @@ -266,6 +298,10 @@ spv = { ConstOffsets = 0x00000020, Sample = 0x00000040, MinLod = 0x00000080, + MakeTexelAvailableKHR = 0x00000100, + MakeTexelVisibleKHR = 0x00000200, + NonPrivateTexelKHR = 0x00000400, + VolatileTexelKHR = 0x00000800, }, FPFastMathModeShift = { @@ -361,11 +397,17 @@ spv = { MaxByteOffset = 45, AlignmentId = 46, MaxByteOffsetId = 47, + NoSignedWrap = 4469, + NoUnsignedWrap = 4470, ExplicitInterpAMD = 4999, OverrideCoverageNV = 5248, PassthroughNV = 5250, ViewportRelativeNV = 5252, SecondaryViewportRelativeNV = 5256, + PerPrimitiveNV = 5271, + PerViewNV = 5272, + PerTaskNV = 5273, + PerVertexNV = 5285, NonUniformEXT = 5300, HlslCounterBufferGOOGLE = 5634, HlslSemanticGOOGLE = 5635, @@ -442,6 +484,34 @@ spv = { PositionPerViewNV = 5261, ViewportMaskPerViewNV = 5262, FullyCoveredEXT = 5264, + TaskCountNV = 5274, + PrimitiveCountNV = 5275, + PrimitiveIndicesNV = 5276, + ClipDistancePerViewNV = 5277, + CullDistancePerViewNV = 5278, + LayerPerViewNV = 5279, + MeshViewCountNV = 5280, + MeshViewIndicesNV = 5281, + BaryCoordNV = 5286, + BaryCoordNoPerspNV = 5287, + FragSizeEXT = 5292, + FragmentSizeNV = 5292, + FragInvocationCountEXT = 5293, + InvocationsPerPixelNV = 5293, + LaunchIdNV = 5319, + LaunchSizeNV = 5320, + WorldRayOriginNV = 5321, + WorldRayDirectionNV = 5322, + ObjectRayOriginNV = 5323, + ObjectRayDirectionNV = 5324, + RayTminNV = 5325, + RayTmaxNV = 5326, + InstanceCustomIndexNV = 5327, + ObjectToWorldNV = 5330, + WorldToObjectNV = 5331, + HitTNV = 5332, + HitKindNV = 5333, + IncomingRayFlagsNV = 5351, }, SelectionControlShift = { @@ -496,6 +566,9 @@ spv = { CrossWorkgroupMemory = 9, AtomicCounterMemory = 10, ImageMemory = 11, + OutputMemoryKHR = 12, + MakeAvailableKHR = 13, + MakeVisibleKHR = 14, }, MemorySemanticsMask = { @@ -510,12 +583,18 @@ spv = { CrossWorkgroupMemory = 0x00000200, AtomicCounterMemory = 0x00000400, ImageMemory = 0x00000800, + OutputMemoryKHR = 0x00001000, + MakeAvailableKHR = 0x00002000, + MakeVisibleKHR = 0x00004000, }, MemoryAccessShift = { Volatile = 0, Aligned = 1, Nontemporal = 2, + MakePointerAvailableKHR = 3, + MakePointerVisibleKHR = 4, + NonPrivatePointerKHR = 5, }, MemoryAccessMask = { @@ -523,6 +602,9 @@ spv = { Volatile = 0x00000001, Aligned = 0x00000002, Nontemporal = 0x00000004, + MakePointerAvailableKHR = 0x00000008, + MakePointerVisibleKHR = 0x00000010, + NonPrivatePointerKHR = 0x00000020, }, Scope = { @@ -531,6 +613,7 @@ spv = { Workgroup = 2, Subgroup = 3, Invocation = 4, + QueueFamilyKHR = 5, }, GroupOperation = { @@ -644,6 +727,11 @@ spv = { StorageBuffer8BitAccess = 4448, UniformAndStorageBuffer8BitAccess = 4449, StoragePushConstant8 = 4450, + DenormPreserve = 4464, + DenormFlushToZero = 4465, + SignedZeroInfNanPreserve = 4466, + RoundingModeRTE = 4467, + RoundingModeRTZ = 4468, Float16ImageAMD = 5008, ImageGatherBiasLodAMD = 5009, FragmentMaskAMD = 5010, @@ -657,6 +745,12 @@ spv = { ShaderStereoViewNV = 5259, PerViewAttributesNV = 5260, FragmentFullyCoveredEXT = 5265, + MeshShadingNV = 5266, + ImageFootprintNV = 5282, + FragmentBarycentricNV = 5284, + ComputeDerivativeGroupQuadsNV = 5288, + FragmentDensityEXT = 5291, + ShadingRateNV = 5291, GroupNonUniformPartitionedNV = 5297, ShaderNonUniformEXT = 5301, RuntimeDescriptorArrayEXT = 5302, @@ -670,6 +764,10 @@ spv = { InputAttachmentArrayNonUniformIndexingEXT = 5310, UniformTexelBufferArrayNonUniformIndexingEXT = 5311, StorageTexelBufferArrayNonUniformIndexingEXT = 5312, + RayTracingNV = 5340, + VulkanMemoryModelKHR = 5345, + VulkanMemoryModelDeviceScopeKHR = 5346, + ComputeDerivativeGroupLinearNV = 5350, SubgroupShuffleINTEL = 5568, SubgroupBufferBlockIOINTEL = 5569, SubgroupImageBlockIOINTEL = 5570, @@ -1032,7 +1130,15 @@ spv = { OpGroupSMaxNonUniformAMD = 5007, OpFragmentMaskFetchAMD = 5011, OpFragmentFetchAMD = 5012, + OpImageSampleFootprintNV = 5283, OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, OpSubgroupShuffleINTEL = 5571, OpSubgroupShuffleDownINTEL = 5572, OpSubgroupShuffleUpINTEL = 5573, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.py b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.py old mode 100755 new mode 100644 index cb3775ff9..89855e11c --- a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.py +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spirv.py @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 The Khronos Group Inc. +# Copyright (c) 2014-2019 The Khronos Group Inc. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and/or associated documentation files (the "Materials"), @@ -26,13 +26,16 @@ # the Binary Section of the SPIR-V specification. # Enumeration tokens for SPIR-V, in various styles: -# C, C++, C++11, JSON, Lua, Python +# C, C++, C++11, JSON, Lua, Python, C#, D # # - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL # - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL # - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL # - Lua will use tables, e.g.: spv.SourceLanguage.GLSL # - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +# - C# will use enum classes in the Specification class located in the "Spv" namespace, +# e.g.: Spv.Specification.SourceLanguage.GLSL +# - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL # # Some tokens act like mask values, which can be OR'd together, # while others are mutually exclusive. The mask-like ones have @@ -42,7 +45,7 @@ spv = { 'MagicNumber' : 0x07230203, 'Version' : 0x00010300, - 'Revision' : 1, + 'Revision' : 6, 'OpCodeMask' : 0xffff, 'WordCountShift' : 16, @@ -63,6 +66,14 @@ spv = { 'Fragment' : 4, 'GLCompute' : 5, 'Kernel' : 6, + 'TaskNV' : 5267, + 'MeshNV' : 5268, + 'RayGenerationNV' : 5313, + 'IntersectionNV' : 5314, + 'AnyHitNV' : 5315, + 'ClosestHitNV' : 5316, + 'MissNV' : 5317, + 'CallableNV' : 5318, }, 'AddressingModel' : { @@ -75,6 +86,7 @@ spv = { 'Simple' : 0, 'GLSL450' : 1, 'OpenCL' : 2, + 'VulkanKHR' : 3, }, 'ExecutionMode' : { @@ -117,7 +129,17 @@ spv = { 'LocalSizeId' : 38, 'LocalSizeHintId' : 39, 'PostDepthCoverage' : 4446, + 'DenormPreserve' : 4459, + 'DenormFlushToZero' : 4460, + 'SignedZeroInfNanPreserve' : 4461, + 'RoundingModeRTE' : 4462, + 'RoundingModeRTZ' : 4463, 'StencilRefReplacingEXT' : 5027, + 'OutputLinesNV' : 5269, + 'OutputPrimitivesNV' : 5270, + 'DerivativeGroupQuadsNV' : 5289, + 'DerivativeGroupLinearNV' : 5290, + 'OutputTrianglesNV' : 5298, }, 'StorageClass' : { @@ -134,6 +156,12 @@ spv = { 'AtomicCounter' : 10, 'Image' : 11, 'StorageBuffer' : 12, + 'CallableDataNV' : 5328, + 'IncomingCallableDataNV' : 5329, + 'RayPayloadNV' : 5338, + 'HitAttributeNV' : 5339, + 'IncomingRayPayloadNV' : 5342, + 'ShaderRecordBufferNV' : 5343, }, 'Dim' : { @@ -254,6 +282,10 @@ spv = { 'ConstOffsets' : 5, 'Sample' : 6, 'MinLod' : 7, + 'MakeTexelAvailableKHR' : 8, + 'MakeTexelVisibleKHR' : 9, + 'NonPrivateTexelKHR' : 10, + 'VolatileTexelKHR' : 11, }, 'ImageOperandsMask' : { @@ -266,6 +298,10 @@ spv = { 'ConstOffsets' : 0x00000020, 'Sample' : 0x00000040, 'MinLod' : 0x00000080, + 'MakeTexelAvailableKHR' : 0x00000100, + 'MakeTexelVisibleKHR' : 0x00000200, + 'NonPrivateTexelKHR' : 0x00000400, + 'VolatileTexelKHR' : 0x00000800, }, 'FPFastMathModeShift' : { @@ -361,11 +397,17 @@ spv = { 'MaxByteOffset' : 45, 'AlignmentId' : 46, 'MaxByteOffsetId' : 47, + 'NoSignedWrap' : 4469, + 'NoUnsignedWrap' : 4470, 'ExplicitInterpAMD' : 4999, 'OverrideCoverageNV' : 5248, 'PassthroughNV' : 5250, 'ViewportRelativeNV' : 5252, 'SecondaryViewportRelativeNV' : 5256, + 'PerPrimitiveNV' : 5271, + 'PerViewNV' : 5272, + 'PerTaskNV' : 5273, + 'PerVertexNV' : 5285, 'NonUniformEXT' : 5300, 'HlslCounterBufferGOOGLE' : 5634, 'HlslSemanticGOOGLE' : 5635, @@ -442,6 +484,34 @@ spv = { 'PositionPerViewNV' : 5261, 'ViewportMaskPerViewNV' : 5262, 'FullyCoveredEXT' : 5264, + 'TaskCountNV' : 5274, + 'PrimitiveCountNV' : 5275, + 'PrimitiveIndicesNV' : 5276, + 'ClipDistancePerViewNV' : 5277, + 'CullDistancePerViewNV' : 5278, + 'LayerPerViewNV' : 5279, + 'MeshViewCountNV' : 5280, + 'MeshViewIndicesNV' : 5281, + 'BaryCoordNV' : 5286, + 'BaryCoordNoPerspNV' : 5287, + 'FragSizeEXT' : 5292, + 'FragmentSizeNV' : 5292, + 'FragInvocationCountEXT' : 5293, + 'InvocationsPerPixelNV' : 5293, + 'LaunchIdNV' : 5319, + 'LaunchSizeNV' : 5320, + 'WorldRayOriginNV' : 5321, + 'WorldRayDirectionNV' : 5322, + 'ObjectRayOriginNV' : 5323, + 'ObjectRayDirectionNV' : 5324, + 'RayTminNV' : 5325, + 'RayTmaxNV' : 5326, + 'InstanceCustomIndexNV' : 5327, + 'ObjectToWorldNV' : 5330, + 'WorldToObjectNV' : 5331, + 'HitTNV' : 5332, + 'HitKindNV' : 5333, + 'IncomingRayFlagsNV' : 5351, }, 'SelectionControlShift' : { @@ -496,6 +566,9 @@ spv = { 'CrossWorkgroupMemory' : 9, 'AtomicCounterMemory' : 10, 'ImageMemory' : 11, + 'OutputMemoryKHR' : 12, + 'MakeAvailableKHR' : 13, + 'MakeVisibleKHR' : 14, }, 'MemorySemanticsMask' : { @@ -510,12 +583,18 @@ spv = { 'CrossWorkgroupMemory' : 0x00000200, 'AtomicCounterMemory' : 0x00000400, 'ImageMemory' : 0x00000800, + 'OutputMemoryKHR' : 0x00001000, + 'MakeAvailableKHR' : 0x00002000, + 'MakeVisibleKHR' : 0x00004000, }, 'MemoryAccessShift' : { 'Volatile' : 0, 'Aligned' : 1, 'Nontemporal' : 2, + 'MakePointerAvailableKHR' : 3, + 'MakePointerVisibleKHR' : 4, + 'NonPrivatePointerKHR' : 5, }, 'MemoryAccessMask' : { @@ -523,6 +602,9 @@ spv = { 'Volatile' : 0x00000001, 'Aligned' : 0x00000002, 'Nontemporal' : 0x00000004, + 'MakePointerAvailableKHR' : 0x00000008, + 'MakePointerVisibleKHR' : 0x00000010, + 'NonPrivatePointerKHR' : 0x00000020, }, 'Scope' : { @@ -531,6 +613,7 @@ spv = { 'Workgroup' : 2, 'Subgroup' : 3, 'Invocation' : 4, + 'QueueFamilyKHR' : 5, }, 'GroupOperation' : { @@ -644,6 +727,11 @@ spv = { 'StorageBuffer8BitAccess' : 4448, 'UniformAndStorageBuffer8BitAccess' : 4449, 'StoragePushConstant8' : 4450, + 'DenormPreserve' : 4464, + 'DenormFlushToZero' : 4465, + 'SignedZeroInfNanPreserve' : 4466, + 'RoundingModeRTE' : 4467, + 'RoundingModeRTZ' : 4468, 'Float16ImageAMD' : 5008, 'ImageGatherBiasLodAMD' : 5009, 'FragmentMaskAMD' : 5010, @@ -657,6 +745,12 @@ spv = { 'ShaderStereoViewNV' : 5259, 'PerViewAttributesNV' : 5260, 'FragmentFullyCoveredEXT' : 5265, + 'MeshShadingNV' : 5266, + 'ImageFootprintNV' : 5282, + 'FragmentBarycentricNV' : 5284, + 'ComputeDerivativeGroupQuadsNV' : 5288, + 'FragmentDensityEXT' : 5291, + 'ShadingRateNV' : 5291, 'GroupNonUniformPartitionedNV' : 5297, 'ShaderNonUniformEXT' : 5301, 'RuntimeDescriptorArrayEXT' : 5302, @@ -670,6 +764,10 @@ spv = { 'InputAttachmentArrayNonUniformIndexingEXT' : 5310, 'UniformTexelBufferArrayNonUniformIndexingEXT' : 5311, 'StorageTexelBufferArrayNonUniformIndexingEXT' : 5312, + 'RayTracingNV' : 5340, + 'VulkanMemoryModelKHR' : 5345, + 'VulkanMemoryModelDeviceScopeKHR' : 5346, + 'ComputeDerivativeGroupLinearNV' : 5350, 'SubgroupShuffleINTEL' : 5568, 'SubgroupBufferBlockIOINTEL' : 5569, 'SubgroupImageBlockIOINTEL' : 5570, @@ -1032,7 +1130,15 @@ spv = { 'OpGroupSMaxNonUniformAMD' : 5007, 'OpFragmentMaskFetchAMD' : 5011, 'OpFragmentFetchAMD' : 5012, + 'OpImageSampleFootprintNV' : 5283, 'OpGroupNonUniformPartitionNV' : 5296, + 'OpWritePackedPrimitiveIndices4x8NV' : 5299, + 'OpReportIntersectionNV' : 5334, + 'OpIgnoreIntersectionNV' : 5335, + 'OpTerminateRayNV' : 5336, + 'OpTraceNV' : 5337, + 'OpTypeAccelerationStructureNV' : 5341, + 'OpExecuteCallableNV' : 5344, 'OpSubgroupShuffleINTEL' : 5571, 'OpSubgroupShuffleDownINTEL' : 5572, 'OpSubgroupShuffleUpINTEL' : 5573, diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spv.d b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spv.d new file mode 100644 index 000000000..4791e7be5 --- /dev/null +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/include/spirv/unified1/spv.d @@ -0,0 +1,1200 @@ +/+ + + Copyright (c) 2014-2019 The Khronos Group Inc. + + + + Permission is hereby granted, free of charge, to any person obtaining a copy + + of this software and/or associated documentation files (the "Materials"), + + to deal in the Materials without restriction, including without limitation + + the rights to use, copy, modify, merge, publish, distribute, sublicense, + + and/or sell copies of the Materials, and to permit persons to whom the + + Materials are furnished to do so, subject to the following conditions: + + + + The above copyright notice and this permission notice shall be included in + + all copies or substantial portions of the Materials. + + + + MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS + + STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND + + HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + + + + THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + + FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS + + IN THE MATERIALS. + +/ + +/+ + + This header is automatically generated by the same tool that creates + + the Binary Section of the SPIR-V specification. + +/ + +/+ + + Enumeration tokens for SPIR-V, in various styles: + + C, C++, C++11, JSON, Lua, Python, C#, D + + + + - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL + + - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL + + - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL + + - Lua will use tables, e.g.: spv.SourceLanguage.GLSL + + - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] + + - C# will use enum classes in the Specification class located in the "Spv" namespace, + + e.g.: Spv.Specification.SourceLanguage.GLSL + + - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL + + + + Some tokens act like mask values, which can be OR'd together, + + while others are mutually exclusive. The mask-like ones have + + "Mask" in their name, and a parallel enum that has the shift + + amount (1 << x) for each corresponding enumerant. + +/ + +module spv; + +enum uint MagicNumber = 0x07230203; +enum uint Version = 0x00010300; +enum uint Revision = 6; +enum uint OpCodeMask = 0xffff; +enum uint WordCountShift = 16; + +enum SourceLanguage : uint +{ + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + HLSL = 5, +} + +enum ExecutionModel : uint +{ + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + TaskNV = 5267, + MeshNV = 5268, + RayGenerationNV = 5313, + IntersectionNV = 5314, + AnyHitNV = 5315, + ClosestHitNV = 5316, + MissNV = 5317, + CallableNV = 5318, +} + +enum AddressingModel : uint +{ + Logical = 0, + Physical32 = 1, + Physical64 = 2, +} + +enum MemoryModel : uint +{ + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + VulkanKHR = 3, +} + +enum ExecutionMode : uint +{ + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + SubgroupsPerWorkgroupId = 37, + LocalSizeId = 38, + LocalSizeHintId = 39, + PostDepthCoverage = 4446, + DenormPreserve = 4459, + DenormFlushToZero = 4460, + SignedZeroInfNanPreserve = 4461, + RoundingModeRTE = 4462, + RoundingModeRTZ = 4463, + StencilRefReplacingEXT = 5027, + OutputLinesNV = 5269, + OutputPrimitivesNV = 5270, + DerivativeGroupQuadsNV = 5289, + DerivativeGroupLinearNV = 5290, + OutputTrianglesNV = 5298, +} + +enum StorageClass : uint +{ + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + StorageBuffer = 12, + CallableDataNV = 5328, + IncomingCallableDataNV = 5329, + RayPayloadNV = 5338, + HitAttributeNV = 5339, + IncomingRayPayloadNV = 5342, + ShaderRecordBufferNV = 5343, +} + +enum Dim : uint +{ + _1D = 0, + _2D = 1, + _3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, +} + +enum SamplerAddressingMode : uint +{ + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, +} + +enum SamplerFilterMode : uint +{ + Nearest = 0, + Linear = 1, +} + +enum ImageFormat : uint +{ + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, +} + +enum ImageChannelOrder : uint +{ + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, +} + +enum ImageChannelDataType : uint +{ + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, +} + +enum ImageOperandsShift : uint +{ + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + MakeTexelAvailableKHR = 8, + MakeTexelVisibleKHR = 9, + NonPrivateTexelKHR = 10, + VolatileTexelKHR = 11, +} + +enum ImageOperandsMask : uint +{ + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + MakeTexelAvailableKHR = 0x00000100, + MakeTexelVisibleKHR = 0x00000200, + NonPrivateTexelKHR = 0x00000400, + VolatileTexelKHR = 0x00000800, +} + +enum FPFastMathModeShift : uint +{ + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, +} + +enum FPFastMathModeMask : uint +{ + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, +} + +enum FPRoundingMode : uint +{ + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, +} + +enum LinkageType : uint +{ + Export = 0, + Import = 1, +} + +enum AccessQualifier : uint +{ + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, +} + +enum FunctionParameterAttribute : uint +{ + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, +} + +enum Decoration : uint +{ + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + AlignmentId = 46, + MaxByteOffsetId = 47, + NoSignedWrap = 4469, + NoUnsignedWrap = 4470, + ExplicitInterpAMD = 4999, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + PerPrimitiveNV = 5271, + PerViewNV = 5272, + PerTaskNV = 5273, + PerVertexNV = 5285, + NonUniformEXT = 5300, + HlslCounterBufferGOOGLE = 5634, + HlslSemanticGOOGLE = 5635, +} + +enum BuiltIn : uint +{ + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + SubgroupEqMask = 4416, + SubgroupEqMaskKHR = 4416, + SubgroupGeMask = 4417, + SubgroupGeMaskKHR = 4417, + SubgroupGtMask = 4418, + SubgroupGtMaskKHR = 4418, + SubgroupLeMask = 4419, + SubgroupLeMaskKHR = 4419, + SubgroupLtMask = 4420, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + DeviceIndex = 4438, + ViewIndex = 4440, + BaryCoordNoPerspAMD = 4992, + BaryCoordNoPerspCentroidAMD = 4993, + BaryCoordNoPerspSampleAMD = 4994, + BaryCoordSmoothAMD = 4995, + BaryCoordSmoothCentroidAMD = 4996, + BaryCoordSmoothSampleAMD = 4997, + BaryCoordPullModelAMD = 4998, + FragStencilRefEXT = 5014, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + FullyCoveredEXT = 5264, + TaskCountNV = 5274, + PrimitiveCountNV = 5275, + PrimitiveIndicesNV = 5276, + ClipDistancePerViewNV = 5277, + CullDistancePerViewNV = 5278, + LayerPerViewNV = 5279, + MeshViewCountNV = 5280, + MeshViewIndicesNV = 5281, + BaryCoordNV = 5286, + BaryCoordNoPerspNV = 5287, + FragSizeEXT = 5292, + FragmentSizeNV = 5292, + FragInvocationCountEXT = 5293, + InvocationsPerPixelNV = 5293, + LaunchIdNV = 5319, + LaunchSizeNV = 5320, + WorldRayOriginNV = 5321, + WorldRayDirectionNV = 5322, + ObjectRayOriginNV = 5323, + ObjectRayDirectionNV = 5324, + RayTminNV = 5325, + RayTmaxNV = 5326, + InstanceCustomIndexNV = 5327, + ObjectToWorldNV = 5330, + WorldToObjectNV = 5331, + HitTNV = 5332, + HitKindNV = 5333, + IncomingRayFlagsNV = 5351, +} + +enum SelectionControlShift : uint +{ + Flatten = 0, + DontFlatten = 1, +} + +enum SelectionControlMask : uint +{ + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, +} + +enum LoopControlShift : uint +{ + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, +} + +enum LoopControlMask : uint +{ + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, +} + +enum FunctionControlShift : uint +{ + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, +} + +enum FunctionControlMask : uint +{ + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, +} + +enum MemorySemanticsShift : uint +{ + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + OutputMemoryKHR = 12, + MakeAvailableKHR = 13, + MakeVisibleKHR = 14, +} + +enum MemorySemanticsMask : uint +{ + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + OutputMemoryKHR = 0x00001000, + MakeAvailableKHR = 0x00002000, + MakeVisibleKHR = 0x00004000, +} + +enum MemoryAccessShift : uint +{ + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + MakePointerAvailableKHR = 3, + MakePointerVisibleKHR = 4, + NonPrivatePointerKHR = 5, +} + +enum MemoryAccessMask : uint +{ + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + MakePointerAvailableKHR = 0x00000008, + MakePointerVisibleKHR = 0x00000010, + NonPrivatePointerKHR = 0x00000020, +} + +enum Scope : uint +{ + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + QueueFamilyKHR = 5, +} + +enum GroupOperation : uint +{ + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + ClusteredReduce = 3, + PartitionedReduceNV = 6, + PartitionedInclusiveScanNV = 7, + PartitionedExclusiveScanNV = 8, +} + +enum KernelEnqueueFlags : uint +{ + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, +} + +enum KernelProfilingInfoShift : uint +{ + CmdExecTime = 0, +} + +enum KernelProfilingInfoMask : uint +{ + MaskNone = 0, + CmdExecTime = 0x00000001, +} + +enum Capability : uint +{ + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + GroupNonUniform = 61, + GroupNonUniformVote = 62, + GroupNonUniformArithmetic = 63, + GroupNonUniformBallot = 64, + GroupNonUniformShuffle = 65, + GroupNonUniformShuffleRelative = 66, + GroupNonUniformClustered = 67, + GroupNonUniformQuad = 68, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + SubgroupVoteKHR = 4431, + StorageBuffer16BitAccess = 4433, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + UniformAndStorageBuffer16BitAccess = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + VariablePointersStorageBuffer = 4441, + VariablePointers = 4442, + AtomicStorageOps = 4445, + SampleMaskPostDepthCoverage = 4447, + StorageBuffer8BitAccess = 4448, + UniformAndStorageBuffer8BitAccess = 4449, + StoragePushConstant8 = 4450, + DenormPreserve = 4464, + DenormFlushToZero = 4465, + SignedZeroInfNanPreserve = 4466, + RoundingModeRTE = 4467, + RoundingModeRTZ = 4468, + Float16ImageAMD = 5008, + ImageGatherBiasLodAMD = 5009, + FragmentMaskAMD = 5010, + StencilExportEXT = 5013, + ImageReadWriteLodAMD = 5015, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerEXT = 5254, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + FragmentFullyCoveredEXT = 5265, + MeshShadingNV = 5266, + ImageFootprintNV = 5282, + FragmentBarycentricNV = 5284, + ComputeDerivativeGroupQuadsNV = 5288, + FragmentDensityEXT = 5291, + ShadingRateNV = 5291, + GroupNonUniformPartitionedNV = 5297, + ShaderNonUniformEXT = 5301, + RuntimeDescriptorArrayEXT = 5302, + InputAttachmentArrayDynamicIndexingEXT = 5303, + UniformTexelBufferArrayDynamicIndexingEXT = 5304, + StorageTexelBufferArrayDynamicIndexingEXT = 5305, + UniformBufferArrayNonUniformIndexingEXT = 5306, + SampledImageArrayNonUniformIndexingEXT = 5307, + StorageBufferArrayNonUniformIndexingEXT = 5308, + StorageImageArrayNonUniformIndexingEXT = 5309, + InputAttachmentArrayNonUniformIndexingEXT = 5310, + UniformTexelBufferArrayNonUniformIndexingEXT = 5311, + StorageTexelBufferArrayNonUniformIndexingEXT = 5312, + RayTracingNV = 5340, + VulkanMemoryModelKHR = 5345, + VulkanMemoryModelDeviceScopeKHR = 5346, + ComputeDerivativeGroupLinearNV = 5350, + SubgroupShuffleINTEL = 5568, + SubgroupBufferBlockIOINTEL = 5569, + SubgroupImageBlockIOINTEL = 5570, +} + +enum Op : uint +{ + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpExecutionModeId = 331, + OpDecorateId = 332, + OpGroupNonUniformElect = 333, + OpGroupNonUniformAll = 334, + OpGroupNonUniformAny = 335, + OpGroupNonUniformAllEqual = 336, + OpGroupNonUniformBroadcast = 337, + OpGroupNonUniformBroadcastFirst = 338, + OpGroupNonUniformBallot = 339, + OpGroupNonUniformInverseBallot = 340, + OpGroupNonUniformBallotBitExtract = 341, + OpGroupNonUniformBallotBitCount = 342, + OpGroupNonUniformBallotFindLSB = 343, + OpGroupNonUniformBallotFindMSB = 344, + OpGroupNonUniformShuffle = 345, + OpGroupNonUniformShuffleXor = 346, + OpGroupNonUniformShuffleUp = 347, + OpGroupNonUniformShuffleDown = 348, + OpGroupNonUniformIAdd = 349, + OpGroupNonUniformFAdd = 350, + OpGroupNonUniformIMul = 351, + OpGroupNonUniformFMul = 352, + OpGroupNonUniformSMin = 353, + OpGroupNonUniformUMin = 354, + OpGroupNonUniformFMin = 355, + OpGroupNonUniformSMax = 356, + OpGroupNonUniformUMax = 357, + OpGroupNonUniformFMax = 358, + OpGroupNonUniformBitwiseAnd = 359, + OpGroupNonUniformBitwiseOr = 360, + OpGroupNonUniformBitwiseXor = 361, + OpGroupNonUniformLogicalAnd = 362, + OpGroupNonUniformLogicalOr = 363, + OpGroupNonUniformLogicalXor = 364, + OpGroupNonUniformQuadBroadcast = 365, + OpGroupNonUniformQuadSwap = 366, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpImageSampleFootprintNV = 5283, + OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateStringGOOGLE = 5633, +} + + diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/CMakeLists.txt b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/bin/makeHeaders b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/bin/makeHeaders index bf2c61515..47d221864 100755 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/bin/makeHeaders +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/bin/makeHeaders @@ -2,4 +2,4 @@ cd ../../include/spirv/unified1 ../../../tools/buildHeaders/build/install/bin/buildSpvHeaders -H spirv.core.grammar.json -dos2unix spirv.* +dos2unix spirv.* SpirV.* spv.* diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.cpp b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.cpp old mode 100755 new mode 100644 index b8b227f3b..7d5cd98c0 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.cpp +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.cpp @@ -1,19 +1,19 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. -// +// Copyright (c) 2014-2019 The Khronos Group Inc. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), // to deal in the Materials without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Materials, and to permit persons to whom the // Materials are furnished to do so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Materials. -// +// // MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS // STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL @@ -69,8 +69,8 @@ namespace { static const int DocMagicNumber = 0x07230203; static const int DocVersion = 0x00010300; - static const int DocRevision = 1; - #define DocRevisionString "1" + static const int DocRevision = 6; + #define DocRevisionString "6" static const std::string DocCopyright; static const std::string DocComment1; static const std::string DocComment2; @@ -97,7 +97,7 @@ namespace { virtual void printEpilogue(std::ostream&) const { } virtual void printMeta(std::ostream&) const; virtual void printTypes(std::ostream&) const { } - + virtual std::string escapeComment(const std::string& s) const; // Default printComments() uses these comment strings @@ -107,7 +107,7 @@ namespace { virtual std::string commentEOL(bool isLast) const { return ""; } typedef std::pair valpair_t; - + // for printing enum values virtual std::string enumBeg(const std::string&, enumStyle_t) const { return ""; } virtual std::string enumEnd(const std::string&, enumStyle_t, bool isLast = false) const { @@ -126,7 +126,7 @@ namespace { const char* fmt, bool isLast = false) const { return ""; } - + std::vector getSortedVals(const Json::Value&) const; virtual std::string indent(int count = 1) const { @@ -149,7 +149,7 @@ namespace { } void addComment(Json::Value& node, const std::string& str); - + Json::Value spvRoot; // JSON SPIR-V data }; @@ -167,7 +167,7 @@ namespace { } const std::string TPrinter::DocCopyright = - "Copyright (c) 2014-2018 The Khronos Group Inc.\n" + "Copyright (c) 2014-2019 The Khronos Group Inc.\n" "\n" "Permission is hereby granted, free of charge, to any person obtaining a copy\n" "of this software and/or associated documentation files (the \"Materials\"),\n" @@ -197,13 +197,16 @@ namespace { const std::string TPrinter::DocComment2 = "Enumeration tokens for SPIR-V, in various styles:\n" - " C, C++, C++11, JSON, Lua, Python\n" + " C, C++, C++11, JSON, Lua, Python, C#, D\n" "\n" "- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL\n" "- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL\n" "- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL\n" "- Lua will use tables, e.g.: spv.SourceLanguage.GLSL\n" "- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']\n" + "- C# will use enum classes in the Specification class located in the \"Spv\" namespace,\n" + " e.g.: Spv.Specification.SourceLanguage.GLSL\n" + "- D will have tokens under the \"spv\" module, e.g: spv.SourceLanguage.GLSL\n" "\n" "Some tokens act like mask values, which can be OR'd together,\n" "while others are mutually exclusive. The mask-like ones have\n" @@ -290,7 +293,7 @@ namespace { { const int commentCount = spvRoot["spv"]["meta"]["Comment"].size(); int commentNum = 0; - + for (const auto& comment : spvRoot["spv"]["meta"]["Comment"]) { out << commentBeg(); @@ -322,7 +325,7 @@ namespace { void TPrinter::printDefs(std::ostream& out) const { const Json::Value& enums = spvRoot["spv"]["enum"]; - + for (auto opClass = enums.begin(); opClass != enums.end(); ++opClass) { const bool isMask = (*opClass)["Type"].asString() == "Bit"; const auto opName = (*opClass)["Name"].asString(); @@ -337,8 +340,8 @@ namespace { out << enumFmt(opPrefix, valpair_t(0, "MaskNone"), enumNoMask); const auto sorted = getSortedVals((*opClass)["Values"]); - - std::string maxEnum = maxEnumFmt(opName, valpair_t(0x7FFFFFFF, "Max"), enumHex); + + std::string maxEnum = maxEnumFmt(opName, valpair_t(0x7FFFFFFF, "Max"), enumHex); bool printMax = (style != enumMask && maxEnum.size() > 0); @@ -390,7 +393,7 @@ namespace { } return newStr; } - + std::string fmtConstInt(unsigned val, const std::string& name, const char* fmt, bool isLast) const override { return indent(3) + '"' + name + "\": " + fmtNum("%d", val) + (isLast ? "\n" : ",\n"); @@ -488,7 +491,7 @@ namespace { return std::string("static const unsigned int ") + pre() + name + " = " + fmtNum(fmt, val) + (isLast ? ";\n\n" : ";\n"); } - + virtual std::string pre() const { return ""; } // C name prefix virtual std::string headerGuardSuffix() const = 0; }; @@ -542,7 +545,7 @@ namespace { if (isMask) { const auto typeName = opName + styleStr(enumMask); - + out << "inline " + typeName + " operator|(" + typeName + " a, " + typeName + " b) { return " + typeName + "(unsigned(a) | unsigned(b)); }\n"; } @@ -554,7 +557,7 @@ namespace { std::string commentBOL() const override { return "// "; } - + virtual std::string enumBeg(const std::string& s, enumStyle_t style) const override { return std::string("enum ") + s + styleStr(style) + " {\n"; } @@ -658,6 +661,76 @@ namespace { } }; + // C# printer + class TPrinterCSharp final : public TPrinter { + private: + std::string commentBOL() const override { return "// "; } + + void printPrologue(std::ostream& out) const override { + out << "namespace Spv\n{\n\n"; + out << indent() << "public static class Specification\n"; + out << indent() << "{\n"; + } + + void printEpilogue(std::ostream& out) const override { + out << indent() << "}\n"; + out << "}\n"; + } + + std::string enumBeg(const std::string& s, enumStyle_t style) const override { + return indent(2) + "public enum " + s + styleStr(style) + "\n" + indent(2) + "{\n"; + } + + std::string enumEnd(const std::string& s, enumStyle_t style, bool isLast) const override { + return indent(2) + "}" + + (isLast ? "\n" : "\n\n"); + } + + std::string enumFmt(const std::string& s, const valpair_t& v, + enumStyle_t style, bool isLast) const override { + return indent(3) + prependIfDigit(s, v.second) + " = " + fmtStyleVal(v.first, style) + ",\n"; + } + + std::string fmtConstInt(unsigned val, const std::string& name, + const char* fmt, bool isLast) const override { + return indent(2) + std::string("public const uint ") + name + + " = " + fmtNum(fmt, val) + (isLast ? ";\n\n" : ";\n"); + } + }; + + // D printer + class TPrinterD final : public TPrinter { + private: + std::string commentBeg() const override { return "/+\n"; } + std::string commentBOL() const override { return " + "; } + std::string commentEnd(bool isLast) const override { return " +/\n"; } + + void printPrologue(std::ostream& out) const override { + out << "module spv;\n\n"; + } + + void printEpilogue(std::ostream& out) const override { + } + + std::string enumBeg(const std::string& s, enumStyle_t style) const override { + return "enum " + s + styleStr(style) + " : uint\n{\n"; + } + + std::string enumEnd(const std::string& s, enumStyle_t style, bool isLast) const override { + return std::string("}\n\n"); + } + + std::string enumFmt(const std::string& s, const valpair_t& v, + enumStyle_t style, bool isLast) const override { + return indent() + prependIfDigit("_", v.second) + " = " + fmtStyleVal(v.first, style) + ",\n"; + } + + std::string fmtConstInt(unsigned val, const std::string& name, + const char* fmt, bool isLast) const override { + return std::string("enum uint ") + name + + " = " + fmtNum(fmt, val) + (isLast ? ";\n\n" : ";\n"); + } + }; + } // namespace namespace spv { @@ -672,6 +745,8 @@ namespace spv { langInfo.push_back(std::make_pair(ELangJSON, "spirv.json")); langInfo.push_back(std::make_pair(ELangLua, "spirv.lua")); langInfo.push_back(std::make_pair(ELangPython, "spirv.py")); + langInfo.push_back(std::make_pair(ELangCSharp, "spirv.cs")); + langInfo.push_back(std::make_pair(ELangD, "spv.d")); for (const auto& lang : langInfo) { std::ofstream out(lang.second, std::ios::out); @@ -697,6 +772,8 @@ namespace spv { case ELangJSON: p = TPrinterPtr(new TPrinterJSON); break; case ELangLua: p = TPrinterPtr(new TPrinterLua); break; case ELangPython: p = TPrinterPtr(new TPrinterPython); break; + case ELangCSharp: p = TPrinterPtr(new TPrinterCSharp); break; + case ELangD: p = TPrinterPtr(new TPrinterD); break; case ELangAll: PrintAllHeaders(); break; default: std::cerr << "Unknown language." << std::endl; diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.h b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.h old mode 100755 new mode 100644 index 5a0952db2..9c34b2112 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.h +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/header.h @@ -1,19 +1,19 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. -// +// Copyright (c) 2014-2019 The Khronos Group Inc. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), // to deal in the Materials without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Materials, and to permit persons to whom the // Materials are furnished to do so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Materials. -// +// // MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS // STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL @@ -41,6 +41,8 @@ namespace spv { ELangJSON, // JSON ELangLua, // Lua ELangPython, // Python + ELangCSharp, // CSharp + ELangD, // D ELangAll, // print headers in all languages to files }; diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.cpp b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.cpp old mode 100755 new mode 100644 index bb325661e..62b85a8f8 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.cpp +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright (c) 2014-2019 The Khronos Group Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.h b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.h old mode 100755 new mode 100644 index 00a2f70d9..bc63a4dfd --- a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.h +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/jsonToSpirv.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright (c) 2014-2019 The Khronos Group Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), diff --git a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/main.cpp b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/main.cpp old mode 100755 new mode 100644 index e146b39b4..67d676c72 --- a/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/main.cpp +++ b/3rdparty/spirv-tools/external/SPIRV-Headers/tools/buildHeaders/main.cpp @@ -1,19 +1,19 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. -// +// Copyright (c) 2014-2019 The Khronos Group Inc. +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and/or associated documentation files (the "Materials"), // to deal in the Materials without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Materials, and to permit persons to whom the // Materials are furnished to do so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Materials. -// +// // MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS // STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL @@ -50,6 +50,8 @@ void Usage() " JSON - JSON format data\n" " Lua - Lua module\n" " Python - Python module (also accepts Py)\n" + " C# - C# module (also accepts CSharp)\n" + " D - D module\n" " -H print header in all supported languages to files in current directory\n" ); } @@ -90,6 +92,10 @@ bool ProcessArguments(int argc, char* argv[]) Language = spv::ELangLua; } else if (language == "python" || language == "py") { Language = spv::ELangPython; + } else if (language == "c#" || language == "csharp") { + Language = spv::ELangCSharp; + } else if (language == "d") { + Language = spv::ELangD; } else return false; diff --git a/3rdparty/spirv-tools/include/generated/build-version.inc b/3rdparty/spirv-tools/include/generated/build-version.inc index 311820b73..cd8e96fee 100644 --- a/3rdparty/spirv-tools/include/generated/build-version.inc +++ b/3rdparty/spirv-tools/include/generated/build-version.inc @@ -1 +1 @@ -"v2018.5-dev", "SPIRV-Tools v2018.5-dev v2018.4-149-g58e53ea" +"v2018.7-dev", "SPIRV-Tools v2018.7-dev bc65303576278bfb67295395327dc395a6adbf98" diff --git a/3rdparty/spirv-tools/include/generated/core.insts-unified1.inc b/3rdparty/spirv-tools/include/generated/core.insts-unified1.inc index e7e16db6b..fdb05b10c 100644 --- a/3rdparty/spirv-tools/include/generated/core.insts-unified1.inc +++ b/3rdparty/spirv-tools/include/generated/core.insts-unified1.inc @@ -14,14 +14,17 @@ static const SpvCapability pygen_variable_caps_GroupNonUniformShuffle[] = {SpvCa static const SpvCapability pygen_variable_caps_GroupNonUniformShuffleRelative[] = {SpvCapabilityGroupNonUniformShuffleRelative}; static const SpvCapability pygen_variable_caps_GroupNonUniformVote[] = {SpvCapabilityGroupNonUniformVote}; static const SpvCapability pygen_variable_caps_Groups[] = {SpvCapabilityGroups}; +static const SpvCapability pygen_variable_caps_ImageFootprintNV[] = {SpvCapabilityImageFootprintNV}; static const SpvCapability pygen_variable_caps_ImageQuery[] = {SpvCapabilityImageQuery}; static const SpvCapability pygen_variable_caps_Kernel[] = {SpvCapabilityKernel}; static const SpvCapability pygen_variable_caps_KernelImageQuery[] = {SpvCapabilityKernel, SpvCapabilityImageQuery}; static const SpvCapability pygen_variable_caps_LiteralSampler[] = {SpvCapabilityLiteralSampler}; static const SpvCapability pygen_variable_caps_Matrix[] = {SpvCapabilityMatrix}; +static const SpvCapability pygen_variable_caps_MeshShadingNV[] = {SpvCapabilityMeshShadingNV}; static const SpvCapability pygen_variable_caps_NamedBarrier[] = {SpvCapabilityNamedBarrier}; static const SpvCapability pygen_variable_caps_PipeStorage[] = {SpvCapabilityPipeStorage}; static const SpvCapability pygen_variable_caps_Pipes[] = {SpvCapabilityPipes}; +static const SpvCapability pygen_variable_caps_RayTracingNV[] = {SpvCapabilityRayTracingNV}; static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader}; static const SpvCapability pygen_variable_caps_SparseResidency[] = {SpvCapabilitySparseResidency}; static const SpvCapability pygen_variable_caps_SubgroupBallotKHR[] = {SpvCapabilitySubgroupBallotKHR}; @@ -37,6 +40,9 @@ static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_decorate_stringS static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_ballot[] = {spvtools::Extension::kSPV_KHR_shader_ballot}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_vote[] = {spvtools::Extension::kSPV_KHR_subgroup_vote}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_NV_mesh_shader}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_image_footprint[] = {spvtools::Extension::kSPV_NV_shader_image_footprint}; static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_subgroup_partitioned[] = {spvtools::Extension::kSPV_NV_shader_subgroup_partitioned}; static const spv_opcode_desc_t kOpcodeTableEntries[] = { @@ -396,7 +402,15 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = { {"GroupSMaxNonUniformAMD", SpvOpGroupSMaxNonUniformAMD, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu}, {"FragmentMaskFetchAMD", SpvOpFragmentMaskFetchAMD, 1, pygen_variable_caps_FragmentMaskAMD, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, 0xffffffffu}, {"FragmentFetchAMD", SpvOpFragmentFetchAMD, 1, pygen_variable_caps_FragmentMaskAMD, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, 0xffffffffu}, + {"ImageSampleFootprintNV", SpvOpImageSampleFootprintNV, 1, pygen_variable_caps_ImageFootprintNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 1, pygen_variable_exts_SPV_NV_shader_image_footprint, 0xffffffffu}, {"GroupNonUniformPartitionNV", SpvOpGroupNonUniformPartitionNV, 1, pygen_variable_caps_GroupNonUniformPartitionedNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, 0xffffffffu}, + {"WritePackedPrimitiveIndices4x8NV", SpvOpWritePackedPrimitiveIndices4x8NV, 1, pygen_variable_caps_MeshShadingNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_mesh_shader, 0xffffffffu}, + {"ReportIntersectionNV", SpvOpReportIntersectionNV, 1, pygen_variable_caps_RayTracingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_NV_ray_tracing, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IgnoreIntersectionNV", SpvOpIgnoreIntersectionNV, 1, pygen_variable_caps_RayTracingNV, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TerminateRayNV", SpvOpTerminateRayNV, 1, pygen_variable_caps_RayTracingNV, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TraceNV", SpvOpTraceNV, 1, pygen_variable_caps_RayTracingNV, 11, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TypeAccelerationStructureNV", SpvOpTypeAccelerationStructureNV, 1, pygen_variable_caps_RayTracingNV, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ExecuteCallableNV", SpvOpExecuteCallableNV, 1, pygen_variable_caps_RayTracingNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, SPV_SPIRV_VERSION_WORD(1, 0)}, {"SubgroupShuffleINTEL", SpvOpSubgroupShuffleINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, {"SubgroupShuffleDownINTEL", SpvOpSubgroupShuffleDownINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, {"SubgroupShuffleUpINTEL", SpvOpSubgroupShuffleUpINTEL, 1, pygen_variable_caps_SubgroupShuffleINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu}, diff --git a/3rdparty/spirv-tools/include/generated/enum_string_mapping.inc b/3rdparty/spirv-tools/include/generated/enum_string_mapping.inc index 964b142d9..fce3b6c2c 100644 --- a/3rdparty/spirv-tools/include/generated/enum_string_mapping.inc +++ b/3rdparty/spirv-tools/include/generated/enum_string_mapping.inc @@ -24,6 +24,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_EXT_descriptor_indexing"; case Extension::kSPV_EXT_fragment_fully_covered: return "SPV_EXT_fragment_fully_covered"; + case Extension::kSPV_EXT_fragment_invocation_density: + return "SPV_EXT_fragment_invocation_density"; case Extension::kSPV_EXT_shader_stencil_export: return "SPV_EXT_shader_stencil_export"; case Extension::kSPV_EXT_shader_viewport_index_layer: @@ -40,8 +42,12 @@ const char* ExtensionToString(Extension extension) { return "SPV_KHR_8bit_storage"; case Extension::kSPV_KHR_device_group: return "SPV_KHR_device_group"; + case Extension::kSPV_KHR_float_controls: + return "SPV_KHR_float_controls"; case Extension::kSPV_KHR_multiview: return "SPV_KHR_multiview"; + case Extension::kSPV_KHR_no_integer_wrap_decoration: + return "SPV_KHR_no_integer_wrap_decoration"; case Extension::kSPV_KHR_post_depth_coverage: return "SPV_KHR_post_depth_coverage"; case Extension::kSPV_KHR_shader_atomic_counter_ops: @@ -56,14 +62,28 @@ const char* ExtensionToString(Extension extension) { return "SPV_KHR_subgroup_vote"; case Extension::kSPV_KHR_variable_pointers: return "SPV_KHR_variable_pointers"; + case Extension::kSPV_KHR_vulkan_memory_model: + return "SPV_KHR_vulkan_memory_model"; case Extension::kSPV_NVX_multiview_per_view_attributes: return "SPV_NVX_multiview_per_view_attributes"; + case Extension::kSPV_NV_compute_shader_derivatives: + return "SPV_NV_compute_shader_derivatives"; + case Extension::kSPV_NV_fragment_shader_barycentric: + return "SPV_NV_fragment_shader_barycentric"; case Extension::kSPV_NV_geometry_shader_passthrough: return "SPV_NV_geometry_shader_passthrough"; + case Extension::kSPV_NV_mesh_shader: + return "SPV_NV_mesh_shader"; + case Extension::kSPV_NV_ray_tracing: + return "SPV_NV_ray_tracing"; case Extension::kSPV_NV_sample_mask_override_coverage: return "SPV_NV_sample_mask_override_coverage"; + case Extension::kSPV_NV_shader_image_footprint: + return "SPV_NV_shader_image_footprint"; case Extension::kSPV_NV_shader_subgroup_partitioned: return "SPV_NV_shader_subgroup_partitioned"; + case Extension::kSPV_NV_shading_rate: + return "SPV_NV_shading_rate"; case Extension::kSPV_NV_stereo_view_rendering: return "SPV_NV_stereo_view_rendering"; case Extension::kSPV_NV_viewport_array2: @@ -77,8 +97,8 @@ const char* ExtensionToString(Extension extension) { bool GetExtensionFromString(const char* str, Extension* extension) { - static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_INTEL_subgroups", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_device_group", "SPV_KHR_multiview", "SPV_KHR_post_depth_coverage", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_vote", "SPV_KHR_variable_pointers", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_geometry_shader_passthrough", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" }; - static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_INTEL_subgroups, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique }; + static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_INTEL_subgroups", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_device_group", "SPV_KHR_float_controls", "SPV_KHR_multiview", "SPV_KHR_no_integer_wrap_decoration", "SPV_KHR_post_depth_coverage", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_vote", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_compute_shader_derivatives", "SPV_NV_fragment_shader_barycentric", "SPV_NV_geometry_shader_passthrough", "SPV_NV_mesh_shader", "SPV_NV_ray_tracing", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_image_footprint", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" }; + static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_INTEL_subgroups, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_float_controls, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_no_integer_wrap_decoration, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_compute_shader_derivatives, Extension::kSPV_NV_fragment_shader_barycentric, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_mesh_shader, Extension::kSPV_NV_ray_tracing, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_image_footprint, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_shading_rate, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique }; const auto b = std::begin(known_ext_strs); const auto e = std::end(known_ext_strs); const auto found = std::equal_range( @@ -260,6 +280,16 @@ const char* CapabilityToString(SpvCapability capability) { return "UniformAndStorageBuffer8BitAccess"; case SpvCapabilityStoragePushConstant8: return "StoragePushConstant8"; + case SpvCapabilityDenormPreserve: + return "DenormPreserve"; + case SpvCapabilityDenormFlushToZero: + return "DenormFlushToZero"; + case SpvCapabilitySignedZeroInfNanPreserve: + return "SignedZeroInfNanPreserve"; + case SpvCapabilityRoundingModeRTE: + return "RoundingModeRTE"; + case SpvCapabilityRoundingModeRTZ: + return "RoundingModeRTZ"; case SpvCapabilityFloat16ImageAMD: return "Float16ImageAMD"; case SpvCapabilityImageGatherBiasLodAMD: @@ -284,6 +314,8 @@ const char* CapabilityToString(SpvCapability capability) { return "PerViewAttributesNV"; case SpvCapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; + case SpvCapabilityMeshShadingNV: + return "MeshShadingNV"; case SpvCapabilityShaderNonUniformEXT: return "ShaderNonUniformEXT"; case SpvCapabilityRuntimeDescriptorArrayEXT: @@ -308,6 +340,8 @@ const char* CapabilityToString(SpvCapability capability) { return "UniformTexelBufferArrayNonUniformIndexingEXT"; case SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT"; + case SpvCapabilityRayTracingNV: + return "RayTracingNV"; case SpvCapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; case SpvCapabilitySubgroupBufferBlockIOINTEL: @@ -316,6 +350,20 @@ const char* CapabilityToString(SpvCapability capability) { return "SubgroupImageBlockIOINTEL"; case SpvCapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; + case SpvCapabilityVulkanMemoryModelKHR: + return "VulkanMemoryModelKHR"; + case SpvCapabilityVulkanMemoryModelDeviceScopeKHR: + return "VulkanMemoryModelDeviceScopeKHR"; + case SpvCapabilityImageFootprintNV: + return "ImageFootprintNV"; + case SpvCapabilityFragmentBarycentricNV: + return "FragmentBarycentricNV"; + case SpvCapabilityComputeDerivativeGroupQuadsNV: + return "ComputeDerivativeGroupQuadsNV"; + case SpvCapabilityComputeDerivativeGroupLinearNV: + return "ComputeDerivativeGroupLinearNV"; + case SpvCapabilityFragmentDensityEXT: + return "FragmentDensityEXT"; case SpvCapabilityMax: assert(0 && "Attempting to convert SpvCapabilityMax to string"); return ""; diff --git a/3rdparty/spirv-tools/include/generated/extension_enum.inc b/3rdparty/spirv-tools/include/generated/extension_enum.inc index c1cf94a7b..83a2daa80 100644 --- a/3rdparty/spirv-tools/include/generated/extension_enum.inc +++ b/3rdparty/spirv-tools/include/generated/extension_enum.inc @@ -10,6 +10,7 @@ kSPV_AMD_shader_trinary_minmax, kSPV_AMD_texture_gather_bias_lod, kSPV_EXT_descriptor_indexing, kSPV_EXT_fragment_fully_covered, +kSPV_EXT_fragment_invocation_density, kSPV_EXT_shader_stencil_export, kSPV_EXT_shader_viewport_index_layer, kSPV_GOOGLE_decorate_string, @@ -18,7 +19,9 @@ kSPV_INTEL_subgroups, kSPV_KHR_16bit_storage, kSPV_KHR_8bit_storage, kSPV_KHR_device_group, +kSPV_KHR_float_controls, kSPV_KHR_multiview, +kSPV_KHR_no_integer_wrap_decoration, kSPV_KHR_post_depth_coverage, kSPV_KHR_shader_atomic_counter_ops, kSPV_KHR_shader_ballot, @@ -26,10 +29,17 @@ kSPV_KHR_shader_draw_parameters, kSPV_KHR_storage_buffer_storage_class, kSPV_KHR_subgroup_vote, kSPV_KHR_variable_pointers, +kSPV_KHR_vulkan_memory_model, kSPV_NVX_multiview_per_view_attributes, +kSPV_NV_compute_shader_derivatives, +kSPV_NV_fragment_shader_barycentric, kSPV_NV_geometry_shader_passthrough, +kSPV_NV_mesh_shader, +kSPV_NV_ray_tracing, kSPV_NV_sample_mask_override_coverage, +kSPV_NV_shader_image_footprint, kSPV_NV_shader_subgroup_partitioned, +kSPV_NV_shading_rate, kSPV_NV_stereo_view_rendering, kSPV_NV_viewport_array2, kSPV_VALIDATOR_ignore_type_decl_unique diff --git a/3rdparty/spirv-tools/include/generated/generators.inc b/3rdparty/spirv-tools/include/generated/generators.inc index 39709d3aa..3a1233a17 100644 --- a/3rdparty/spirv-tools/include/generated/generators.inc +++ b/3rdparty/spirv-tools/include/generated/generators.inc @@ -18,3 +18,4 @@ {17, "Khronos", "SPIR-V Tools Linker", "Khronos SPIR-V Tools Linker"}, {18, "Wine", "VKD3D Shader Compiler", "Wine VKD3D Shader Compiler"}, {19, "Clay", "Clay Shader Compiler", "Clay Clay Shader Compiler"}, +{20, "W3C WebGPU Group", "WHLSL Shader Translator", "W3C WebGPU Group WHLSL Shader Translator"}, diff --git a/3rdparty/spirv-tools/include/generated/operand.kinds-unified1.inc b/3rdparty/spirv-tools/include/generated/operand.kinds-unified1.inc index e40c74b21..cc1d26f9a 100644 --- a/3rdparty/spirv-tools/include/generated/operand.kinds-unified1.inc +++ b/3rdparty/spirv-tools/include/generated/operand.kinds-unified1.inc @@ -1,14 +1,24 @@ static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddresses}; static const SpvCapability pygen_variable_caps_AtomicStorage[] = {SpvCapabilityAtomicStorage}; static const SpvCapability pygen_variable_caps_ClipDistance[] = {SpvCapabilityClipDistance}; +static const SpvCapability pygen_variable_caps_ComputeDerivativeGroupLinearNV[] = {SpvCapabilityComputeDerivativeGroupLinearNV}; +static const SpvCapability pygen_variable_caps_ComputeDerivativeGroupQuadsNV[] = {SpvCapabilityComputeDerivativeGroupQuadsNV}; static const SpvCapability pygen_variable_caps_CullDistance[] = {SpvCapabilityCullDistance}; +static const SpvCapability pygen_variable_caps_DenormFlushToZero[] = {SpvCapabilityDenormFlushToZero}; +static const SpvCapability pygen_variable_caps_DenormPreserve[] = {SpvCapabilityDenormPreserve}; static const SpvCapability pygen_variable_caps_DeviceEnqueue[] = {SpvCapabilityDeviceEnqueue}; static const SpvCapability pygen_variable_caps_DeviceGroup[] = {SpvCapabilityDeviceGroup}; static const SpvCapability pygen_variable_caps_DrawParameters[] = {SpvCapabilityDrawParameters}; +static const SpvCapability pygen_variable_caps_DrawParametersMeshShadingNV[] = {SpvCapabilityDrawParameters, SpvCapabilityMeshShadingNV}; +static const SpvCapability pygen_variable_caps_FragmentBarycentricNV[] = {SpvCapabilityFragmentBarycentricNV}; +static const SpvCapability pygen_variable_caps_FragmentDensityEXTShadingRateNV[] = {SpvCapabilityFragmentDensityEXT, SpvCapabilityShadingRateNV}; static const SpvCapability pygen_variable_caps_FragmentFullyCoveredEXT[] = {SpvCapabilityFragmentFullyCoveredEXT}; static const SpvCapability pygen_variable_caps_GenericPointer[] = {SpvCapabilityGenericPointer}; static const SpvCapability pygen_variable_caps_Geometry[] = {SpvCapabilityGeometry}; +static const SpvCapability pygen_variable_caps_GeometryMeshShadingNV[] = {SpvCapabilityGeometry, SpvCapabilityMeshShadingNV}; static const SpvCapability pygen_variable_caps_GeometryTessellation[] = {SpvCapabilityGeometry, SpvCapabilityTessellation}; +static const SpvCapability pygen_variable_caps_GeometryTessellationMeshShadingNV[] = {SpvCapabilityGeometry, SpvCapabilityTessellation, SpvCapabilityMeshShadingNV}; +static const SpvCapability pygen_variable_caps_GeometryTessellationRayTracingNV[] = {SpvCapabilityGeometry, SpvCapabilityTessellation, SpvCapabilityRayTracingNV}; static const SpvCapability pygen_variable_caps_GeometryShaderPassthroughNV[] = {SpvCapabilityGeometryShaderPassthroughNV}; static const SpvCapability pygen_variable_caps_GeometryStreams[] = {SpvCapabilityGeometryStreams}; static const SpvCapability pygen_variable_caps_GroupNonUniform[] = {SpvCapabilityGroupNonUniform}; @@ -27,25 +37,37 @@ static const SpvCapability pygen_variable_caps_KernelGroupNonUniformSubgroupBall static const SpvCapability pygen_variable_caps_KernelGroupNonUniformArithmeticGroupNonUniformBallot[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniformArithmetic, SpvCapabilityGroupNonUniformBallot}; static const SpvCapability pygen_variable_caps_Linkage[] = {SpvCapabilityLinkage}; static const SpvCapability pygen_variable_caps_Matrix[] = {SpvCapabilityMatrix}; +static const SpvCapability pygen_variable_caps_MeshShadingNV[] = {SpvCapabilityMeshShadingNV}; static const SpvCapability pygen_variable_caps_MinLod[] = {SpvCapabilityMinLod}; static const SpvCapability pygen_variable_caps_MultiView[] = {SpvCapabilityMultiView}; static const SpvCapability pygen_variable_caps_MultiViewport[] = {SpvCapabilityMultiViewport}; -static const SpvCapability pygen_variable_caps_PerViewAttributesNV[] = {SpvCapabilityPerViewAttributesNV}; +static const SpvCapability pygen_variable_caps_PerViewAttributesNVMeshShadingNV[] = {SpvCapabilityPerViewAttributesNV, SpvCapabilityMeshShadingNV}; static const SpvCapability pygen_variable_caps_Pipes[] = {SpvCapabilityPipes}; +static const SpvCapability pygen_variable_caps_RayTracingNV[] = {SpvCapabilityRayTracingNV}; +static const SpvCapability pygen_variable_caps_RoundingModeRTE[] = {SpvCapabilityRoundingModeRTE}; +static const SpvCapability pygen_variable_caps_RoundingModeRTZ[] = {SpvCapabilityRoundingModeRTZ}; static const SpvCapability pygen_variable_caps_SampleMaskOverrideCoverageNV[] = {SpvCapabilitySampleMaskOverrideCoverageNV}; static const SpvCapability pygen_variable_caps_SampleMaskPostDepthCoverage[] = {SpvCapabilitySampleMaskPostDepthCoverage}; static const SpvCapability pygen_variable_caps_SampleRateShading[] = {SpvCapabilitySampleRateShading}; static const SpvCapability pygen_variable_caps_Sampled1D[] = {SpvCapabilitySampled1D}; +static const SpvCapability pygen_variable_caps_Sampled1DImage1D[] = {SpvCapabilitySampled1D, SpvCapabilityImage1D}; static const SpvCapability pygen_variable_caps_SampledBuffer[] = {SpvCapabilitySampledBuffer}; +static const SpvCapability pygen_variable_caps_SampledBufferImageBuffer[] = {SpvCapabilitySampledBuffer, SpvCapabilityImageBuffer}; static const SpvCapability pygen_variable_caps_SampledBufferShaderNonUniformEXT[] = {SpvCapabilitySampledBuffer, SpvCapabilityShaderNonUniformEXT}; static const SpvCapability pygen_variable_caps_SampledCubeArray[] = {SpvCapabilitySampledCubeArray}; static const SpvCapability pygen_variable_caps_SampledRect[] = {SpvCapabilitySampledRect}; +static const SpvCapability pygen_variable_caps_SampledRectImageRect[] = {SpvCapabilitySampledRect, SpvCapabilityImageRect}; static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader}; +static const SpvCapability pygen_variable_caps_ShaderImageCubeArray[] = {SpvCapabilityShader, SpvCapabilityImageCubeArray}; static const SpvCapability pygen_variable_caps_ShaderKernel[] = {SpvCapabilityShader, SpvCapabilityKernel}; +static const SpvCapability pygen_variable_caps_ShaderKernelImageMSArray[] = {SpvCapabilityShader, SpvCapabilityKernel, SpvCapabilityImageMSArray}; static const SpvCapability pygen_variable_caps_ShaderNonUniformEXT[] = {SpvCapabilityShaderNonUniformEXT}; static const SpvCapability pygen_variable_caps_ShaderStereoViewNV[] = {SpvCapabilityShaderStereoViewNV}; static const SpvCapability pygen_variable_caps_ShaderViewportIndexLayerNV[] = {SpvCapabilityShaderViewportIndexLayerNV}; static const SpvCapability pygen_variable_caps_ShaderViewportMaskNV[] = {SpvCapabilityShaderViewportMaskNV}; +static const SpvCapability pygen_variable_caps_ShaderViewportMaskNVMeshShadingNV[] = {SpvCapabilityShaderViewportMaskNV, SpvCapabilityMeshShadingNV}; +static const SpvCapability pygen_variable_caps_ShadingRateNVFragmentDensityEXT[] = {SpvCapabilityShadingRateNV, SpvCapabilityFragmentDensityEXT}; +static const SpvCapability pygen_variable_caps_SignedZeroInfNanPreserve[] = {SpvCapabilitySignedZeroInfNanPreserve}; static const SpvCapability pygen_variable_caps_StencilExportEXT[] = {SpvCapabilityStencilExportEXT}; static const SpvCapability pygen_variable_caps_StorageBuffer16BitAccessStorageUniformBufferBlock16[] = {SpvCapabilityStorageBuffer16BitAccess, SpvCapabilityStorageUniformBufferBlock16}; static const SpvCapability pygen_variable_caps_StorageBuffer8BitAccess[] = {SpvCapabilityStorageBuffer8BitAccess}; @@ -55,6 +77,7 @@ static const SpvCapability pygen_variable_caps_SubgroupDispatch[] = {SpvCapabili static const SpvCapability pygen_variable_caps_Tessellation[] = {SpvCapabilityTessellation}; static const SpvCapability pygen_variable_caps_TransformFeedback[] = {SpvCapabilityTransformFeedback}; static const SpvCapability pygen_variable_caps_VariablePointersStorageBuffer[] = {SpvCapabilityVariablePointersStorageBuffer}; +static const SpvCapability pygen_variable_caps_VulkanMemoryModelKHR[] = {SpvCapabilityVulkanMemoryModelKHR}; static const spvtools::Extension pygen_variable_exts_SPV_AMD_gpu_shader_half_float_fetch[] = {spvtools::Extension::kSPV_AMD_gpu_shader_half_float_fetch}; static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter[] = {spvtools::Extension::kSPV_AMD_shader_explicit_vertex_parameter}; @@ -63,6 +86,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_image_load_s static const spvtools::Extension pygen_variable_exts_SPV_AMD_texture_gather_bias_lod[] = {spvtools::Extension::kSPV_AMD_texture_gather_bias_lod}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_descriptor_indexing[] = {spvtools::Extension::kSPV_EXT_descriptor_indexing}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_fully_covered[] = {spvtools::Extension::kSPV_EXT_fragment_fully_covered}; +static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_invocation_densitySPV_NV_shading_rate[] = {spvtools::Extension::kSPV_EXT_fragment_invocation_density, spvtools::Extension::kSPV_NV_shading_rate}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_stencil_export[] = {spvtools::Extension::kSPV_EXT_shader_stencil_export}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_viewport_index_layer[] = {spvtools::Extension::kSPV_EXT_shader_viewport_index_layer}; static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1}; @@ -70,20 +94,32 @@ static const spvtools::Extension pygen_variable_exts_SPV_INTEL_subgroups[] = {sp static const spvtools::Extension pygen_variable_exts_SPV_KHR_16bit_storage[] = {spvtools::Extension::kSPV_KHR_16bit_storage}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_8bit_storage[] = {spvtools::Extension::kSPV_KHR_8bit_storage}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_device_group[] = {spvtools::Extension::kSPV_KHR_device_group}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_float_controls[] = {spvtools::Extension::kSPV_KHR_float_controls}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_multiview[] = {spvtools::Extension::kSPV_KHR_multiview}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_no_integer_wrap_decoration[] = {spvtools::Extension::kSPV_KHR_no_integer_wrap_decoration}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_post_depth_coverage[] = {spvtools::Extension::kSPV_KHR_post_depth_coverage}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_atomic_counter_ops[] = {spvtools::Extension::kSPV_KHR_shader_atomic_counter_ops}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_ballot[] = {spvtools::Extension::kSPV_KHR_shader_ballot}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parameters[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parametersSPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters, spvtools::Extension::kSPV_NV_mesh_shader}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_storage_buffer_storage_class, spvtools::Extension::kSPV_KHR_variable_pointers}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_vote[] = {spvtools::Extension::kSPV_KHR_subgroup_vote}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_variable_pointers}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_vulkan_memory_model[] = {spvtools::Extension::kSPV_KHR_vulkan_memory_model}; static const spvtools::Extension pygen_variable_exts_SPV_NVX_multiview_per_view_attributes[] = {spvtools::Extension::kSPV_NVX_multiview_per_view_attributes}; +static const spvtools::Extension pygen_variable_exts_SPV_NVX_multiview_per_view_attributesSPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_NVX_multiview_per_view_attributes, spvtools::Extension::kSPV_NV_mesh_shader}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_compute_shader_derivatives[] = {spvtools::Extension::kSPV_NV_compute_shader_derivatives}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_fragment_shader_barycentric[] = {spvtools::Extension::kSPV_NV_fragment_shader_barycentric}; static const spvtools::Extension pygen_variable_exts_SPV_NV_geometry_shader_passthrough[] = {spvtools::Extension::kSPV_NV_geometry_shader_passthrough}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_NV_mesh_shader}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing}; static const spvtools::Extension pygen_variable_exts_SPV_NV_sample_mask_override_coverage[] = {spvtools::Extension::kSPV_NV_sample_mask_override_coverage}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_image_footprint[] = {spvtools::Extension::kSPV_NV_shader_image_footprint}; static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_subgroup_partitioned[] = {spvtools::Extension::kSPV_NV_shader_subgroup_partitioned}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_shading_rateSPV_EXT_fragment_invocation_density[] = {spvtools::Extension::kSPV_NV_shading_rate, spvtools::Extension::kSPV_EXT_fragment_invocation_density}; static const spvtools::Extension pygen_variable_exts_SPV_NV_stereo_view_rendering[] = {spvtools::Extension::kSPV_NV_stereo_view_rendering}; static const spvtools::Extension pygen_variable_exts_SPV_NV_viewport_array2[] = {spvtools::Extension::kSPV_NV_viewport_array2}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_viewport_array2SPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_NV_viewport_array2, spvtools::Extension::kSPV_NV_mesh_shader}; static const spv_operand_desc_t pygen_variable_ImageOperandsEntries[] = { {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, @@ -94,7 +130,11 @@ static const spv_operand_desc_t pygen_variable_ImageOperandsEntries[] = { {"Offset", 0x0010, 1, pygen_variable_caps_ImageGatherExtended, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"ConstOffsets", 0x0020, 1, pygen_variable_caps_ImageGatherExtended, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Sample", 0x0040, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"MinLod", 0x0080, 1, pygen_variable_caps_MinLod, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)} + {"MinLod", 0x0080, 1, pygen_variable_caps_MinLod, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MakeTexelAvailableKHR", 0x0100, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {SPV_OPERAND_TYPE_SCOPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MakeTexelVisibleKHR", 0x0200, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {SPV_OPERAND_TYPE_SCOPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NonPrivateTexelKHR", 0x0400, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VolatileTexelKHR", 0x0800, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_FPFastMathModeEntries[] = { @@ -140,14 +180,20 @@ static const spv_operand_desc_t pygen_variable_MemorySemanticsEntries[] = { {"WorkgroupMemory", 0x0100, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"CrossWorkgroupMemory", 0x0200, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"AtomicCounterMemory", 0x0400, 1, pygen_variable_caps_AtomicStorage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"ImageMemory", 0x0800, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} + {"ImageMemory", 0x0800, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputMemoryKHR", 0x1000, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MakeAvailableKHR", 0x2000, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MakeVisibleKHR", 0x4000, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_MemoryAccessEntries[] = { {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Volatile", 0x0001, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Aligned", 0x0002, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"Nontemporal", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} + {"Nontemporal", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MakePointerAvailableKHR", 0x0008, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {SPV_OPERAND_TYPE_SCOPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MakePointerVisibleKHR", 0x0010, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {SPV_OPERAND_TYPE_SCOPE_ID}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"NonPrivatePointerKHR", 0x0020, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_KernelProfilingInfoEntries[] = { @@ -171,7 +217,15 @@ static const spv_operand_desc_t pygen_variable_ExecutionModelEntries[] = { {"Geometry", 3, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Fragment", 4, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"GLCompute", 5, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"Kernel", 6, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} + {"Kernel", 6, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"TaskNV", 5267, 1, pygen_variable_caps_MeshShadingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MeshNV", 5268, 1, pygen_variable_caps_MeshShadingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RayGenerationNV", 5313, 1, pygen_variable_caps_RayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IntersectionNV", 5314, 1, pygen_variable_caps_RayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"AnyHitNV", 5315, 1, pygen_variable_caps_RayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ClosestHitNV", 5316, 1, pygen_variable_caps_RayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"MissNV", 5317, 1, pygen_variable_caps_RayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"CallableNV", 5318, 1, pygen_variable_caps_RayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_AddressingModelEntries[] = { @@ -183,7 +237,8 @@ static const spv_operand_desc_t pygen_variable_AddressingModelEntries[] = { static const spv_operand_desc_t pygen_variable_MemoryModelEntries[] = { {"Simple", 0, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"GLSL450", 1, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"OpenCL", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} + {"OpenCL", 2, 1, pygen_variable_caps_Kernel, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"VulkanKHR", 3, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_ExecutionModeEntries[] = { @@ -212,8 +267,8 @@ static const spv_operand_desc_t pygen_variable_ExecutionModeEntries[] = { {"InputTrianglesAdjacency", 23, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Quads", 24, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Isolines", 25, 1, pygen_variable_caps_Tessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"OutputVertices", 26, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"OutputPoints", 27, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputVertices", 26, 3, pygen_variable_caps_GeometryTessellationMeshShadingNV, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"OutputPoints", 27, 2, pygen_variable_caps_GeometryMeshShadingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"OutputLineStrip", 28, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"OutputTriangleStrip", 29, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"VecTypeHint", 30, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1, 0)}, @@ -226,7 +281,17 @@ static const spv_operand_desc_t pygen_variable_ExecutionModeEntries[] = { {"LocalSizeId", 38, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, {"LocalSizeHintId", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, {"PostDepthCoverage", 4446, 1, pygen_variable_caps_SampleMaskPostDepthCoverage, 1, pygen_variable_exts_SPV_KHR_post_depth_coverage, {}, 0xffffffffu}, - {"StencilRefReplacingEXT", 5027, 1, pygen_variable_caps_StencilExportEXT, 1, pygen_variable_exts_SPV_EXT_shader_stencil_export, {}, 0xffffffffu} + {"DenormPreserve", 4459, 1, pygen_variable_caps_DenormPreserve, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"DenormFlushToZero", 4460, 1, pygen_variable_caps_DenormFlushToZero, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"SignedZeroInfNanPreserve", 4461, 1, pygen_variable_caps_SignedZeroInfNanPreserve, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"RoundingModeRTE", 4462, 1, pygen_variable_caps_RoundingModeRTE, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"RoundingModeRTZ", 4463, 1, pygen_variable_caps_RoundingModeRTZ, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"StencilRefReplacingEXT", 5027, 1, pygen_variable_caps_StencilExportEXT, 1, pygen_variable_exts_SPV_EXT_shader_stencil_export, {}, 0xffffffffu}, + {"OutputLinesNV", 5269, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"OutputPrimitivesNV", 5270, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"DerivativeGroupQuadsNV", 5289, 1, pygen_variable_caps_ComputeDerivativeGroupQuadsNV, 1, pygen_variable_exts_SPV_NV_compute_shader_derivatives, {}, 0xffffffffu}, + {"DerivativeGroupLinearNV", 5290, 1, pygen_variable_caps_ComputeDerivativeGroupLinearNV, 1, pygen_variable_exts_SPV_NV_compute_shader_derivatives, {}, 0xffffffffu}, + {"OutputTrianglesNV", 5298, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu} }; static const spv_operand_desc_t pygen_variable_StorageClassEntries[] = { @@ -242,16 +307,22 @@ static const spv_operand_desc_t pygen_variable_StorageClassEntries[] = { {"PushConstant", 9, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"AtomicCounter", 10, 1, pygen_variable_caps_AtomicStorage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Image", 11, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"StorageBuffer", 12, 1, pygen_variable_caps_Shader, 2, pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers, {}, SPV_SPIRV_VERSION_WORD(1,3)} + {"StorageBuffer", 12, 1, pygen_variable_caps_Shader, 2, pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"CallableDataNV", 5328, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IncomingCallableDataNV", 5329, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RayPayloadNV", 5338, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HitAttributeNV", 5339, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IncomingRayPayloadNV", 5342, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ShaderRecordBufferNV", 5343, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_DimEntries[] = { - {"1D", 0, 1, pygen_variable_caps_Sampled1D, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"2D", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"1D", 0, 2, pygen_variable_caps_Sampled1DImage1D, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"2D", 1, 3, pygen_variable_caps_ShaderKernelImageMSArray, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"3D", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"Cube", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"Rect", 4, 1, pygen_variable_caps_SampledRect, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"Buffer", 5, 1, pygen_variable_caps_SampledBuffer, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Cube", 3, 2, pygen_variable_caps_ShaderImageCubeArray, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Rect", 4, 2, pygen_variable_caps_SampledRectImageRect, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"Buffer", 5, 2, pygen_variable_caps_SampledBufferImageBuffer, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"SubpassData", 6, 1, pygen_variable_caps_InputAttachment, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; @@ -430,11 +501,17 @@ static const spv_operand_desc_t pygen_variable_DecorationEntries[] = { {"MaxByteOffset", 45, 1, pygen_variable_caps_Addresses, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1)}, {"AlignmentId", 46, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, {"MaxByteOffsetId", 47, 1, pygen_variable_caps_Addresses, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2)}, + {"NoSignedWrap", 4469, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_no_integer_wrap_decoration, {}, 0xffffffffu}, + {"NoUnsignedWrap", 4470, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_no_integer_wrap_decoration, {}, 0xffffffffu}, {"ExplicitInterpAMD", 4999, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, {"OverrideCoverageNV", 5248, 1, pygen_variable_caps_SampleMaskOverrideCoverageNV, 1, pygen_variable_exts_SPV_NV_sample_mask_override_coverage, {}, 0xffffffffu}, {"PassthroughNV", 5250, 1, pygen_variable_caps_GeometryShaderPassthroughNV, 1, pygen_variable_exts_SPV_NV_geometry_shader_passthrough, {}, 0xffffffffu}, {"ViewportRelativeNV", 5252, 1, pygen_variable_caps_ShaderViewportMaskNV, 0, nullptr, {}, 0xffffffffu}, {"SecondaryViewportRelativeNV", 5256, 1, pygen_variable_caps_ShaderStereoViewNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0xffffffffu}, + {"PerPrimitiveNV", 5271, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"PerViewNV", 5272, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"PerTaskNV", 5273, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"PerVertexNV", 5285, 1, pygen_variable_caps_FragmentBarycentricNV, 1, pygen_variable_exts_SPV_NV_fragment_shader_barycentric, {}, 0xffffffffu}, {"NonUniformEXT", 5300, 1, pygen_variable_caps_ShaderNonUniformEXT, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"HlslCounterBufferGOOGLE", 5634, 0, nullptr, 1, pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1, {SPV_OPERAND_TYPE_ID}, 0xffffffffu}, {"HlslSemanticGOOGLE", 5635, 0, nullptr, 1, pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0xffffffffu} @@ -447,7 +524,7 @@ static const spv_operand_desc_t pygen_variable_BuiltInEntries[] = { {"CullDistance", 4, 1, pygen_variable_caps_CullDistance, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"VertexId", 5, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"InstanceId", 6, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"PrimitiveId", 7, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"PrimitiveId", 7, 3, pygen_variable_caps_GeometryTessellationRayTracingNV, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"InvocationId", 8, 2, pygen_variable_caps_GeometryTessellation, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Layer", 9, 1, pygen_variable_caps_Geometry, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"ViewportIndex", 10, 1, pygen_variable_caps_MultiViewport, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, @@ -494,7 +571,7 @@ static const spv_operand_desc_t pygen_variable_BuiltInEntries[] = { {"SubgroupLtMaskKHR", 4420, 2, pygen_variable_caps_SubgroupBallotKHRGroupNonUniformBallot, 1, pygen_variable_exts_SPV_KHR_shader_ballot, {}, SPV_SPIRV_VERSION_WORD(1,3)}, {"BaseVertex", 4424, 1, pygen_variable_caps_DrawParameters, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, {"BaseInstance", 4425, 1, pygen_variable_caps_DrawParameters, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, - {"DrawIndex", 4426, 1, pygen_variable_caps_DrawParameters, 1, pygen_variable_exts_SPV_KHR_shader_draw_parameters, {}, SPV_SPIRV_VERSION_WORD(1,3)}, + {"DrawIndex", 4426, 2, pygen_variable_caps_DrawParametersMeshShadingNV, 2, pygen_variable_exts_SPV_KHR_shader_draw_parametersSPV_NV_mesh_shader, {}, SPV_SPIRV_VERSION_WORD(1,3)}, {"DeviceIndex", 4438, 1, pygen_variable_caps_DeviceGroup, 1, pygen_variable_exts_SPV_KHR_device_group, {}, SPV_SPIRV_VERSION_WORD(1,3)}, {"ViewIndex", 4440, 1, pygen_variable_caps_MultiView, 1, pygen_variable_exts_SPV_KHR_multiview, {}, SPV_SPIRV_VERSION_WORD(1,3)}, {"BaryCoordNoPerspAMD", 4992, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, @@ -505,12 +582,40 @@ static const spv_operand_desc_t pygen_variable_BuiltInEntries[] = { {"BaryCoordSmoothSampleAMD", 4997, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, {"BaryCoordPullModelAMD", 4998, 0, nullptr, 1, pygen_variable_exts_SPV_AMD_shader_explicit_vertex_parameter, {}, 0xffffffffu}, {"FragStencilRefEXT", 5014, 1, pygen_variable_caps_StencilExportEXT, 1, pygen_variable_exts_SPV_EXT_shader_stencil_export, {}, 0xffffffffu}, - {"ViewportMaskNV", 5253, 1, pygen_variable_caps_ShaderViewportMaskNV, 0, nullptr, {}, 0xffffffffu}, + {"ViewportMaskNV", 5253, 2, pygen_variable_caps_ShaderViewportMaskNVMeshShadingNV, 2, pygen_variable_exts_SPV_NV_viewport_array2SPV_NV_mesh_shader, {}, 0xffffffffu}, {"SecondaryPositionNV", 5257, 1, pygen_variable_caps_ShaderStereoViewNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {}, 0xffffffffu}, {"SecondaryViewportMaskNV", 5258, 1, pygen_variable_caps_ShaderStereoViewNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {}, 0xffffffffu}, - {"PositionPerViewNV", 5261, 1, pygen_variable_caps_PerViewAttributesNV, 0, nullptr, {}, 0xffffffffu}, - {"ViewportMaskPerViewNV", 5262, 1, pygen_variable_caps_PerViewAttributesNV, 0, nullptr, {}, 0xffffffffu}, - {"FullyCoveredEXT", 5264, 1, pygen_variable_caps_FragmentFullyCoveredEXT, 1, pygen_variable_exts_SPV_EXT_fragment_fully_covered, {}, 0xffffffffu} + {"PositionPerViewNV", 5261, 2, pygen_variable_caps_PerViewAttributesNVMeshShadingNV, 2, pygen_variable_exts_SPV_NVX_multiview_per_view_attributesSPV_NV_mesh_shader, {}, 0xffffffffu}, + {"ViewportMaskPerViewNV", 5262, 2, pygen_variable_caps_PerViewAttributesNVMeshShadingNV, 2, pygen_variable_exts_SPV_NVX_multiview_per_view_attributesSPV_NV_mesh_shader, {}, 0xffffffffu}, + {"FullyCoveredEXT", 5264, 1, pygen_variable_caps_FragmentFullyCoveredEXT, 1, pygen_variable_exts_SPV_EXT_fragment_fully_covered, {}, 0xffffffffu}, + {"TaskCountNV", 5274, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"PrimitiveCountNV", 5275, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"PrimitiveIndicesNV", 5276, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"ClipDistancePerViewNV", 5277, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"CullDistancePerViewNV", 5278, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"LayerPerViewNV", 5279, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"MeshViewCountNV", 5280, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"MeshViewIndicesNV", 5281, 1, pygen_variable_caps_MeshShadingNV, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"BaryCoordNV", 5286, 1, pygen_variable_caps_FragmentBarycentricNV, 1, pygen_variable_exts_SPV_NV_fragment_shader_barycentric, {}, 0xffffffffu}, + {"BaryCoordNoPerspNV", 5287, 1, pygen_variable_caps_FragmentBarycentricNV, 1, pygen_variable_exts_SPV_NV_fragment_shader_barycentric, {}, 0xffffffffu}, + {"FragSizeEXT", 5292, 2, pygen_variable_caps_FragmentDensityEXTShadingRateNV, 2, pygen_variable_exts_SPV_EXT_fragment_invocation_densitySPV_NV_shading_rate, {}, 0xffffffffu}, + {"FragmentSizeNV", 5292, 2, pygen_variable_caps_ShadingRateNVFragmentDensityEXT, 2, pygen_variable_exts_SPV_NV_shading_rateSPV_EXT_fragment_invocation_density, {}, 0xffffffffu}, + {"FragInvocationCountEXT", 5293, 2, pygen_variable_caps_FragmentDensityEXTShadingRateNV, 2, pygen_variable_exts_SPV_EXT_fragment_invocation_densitySPV_NV_shading_rate, {}, 0xffffffffu}, + {"InvocationsPerPixelNV", 5293, 2, pygen_variable_caps_ShadingRateNVFragmentDensityEXT, 2, pygen_variable_exts_SPV_NV_shading_rateSPV_EXT_fragment_invocation_density, {}, 0xffffffffu}, + {"LaunchIdNV", 5319, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"LaunchSizeNV", 5320, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorldRayOriginNV", 5321, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorldRayDirectionNV", 5322, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ObjectRayOriginNV", 5323, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ObjectRayDirectionNV", 5324, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RayTminNV", 5325, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"RayTmaxNV", 5326, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"InstanceCustomIndexNV", 5327, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"ObjectToWorldNV", 5330, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"WorldToObjectNV", 5331, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HitTNV", 5332, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"HitKindNV", 5333, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"IncomingRayFlagsNV", 5351, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_ScopeEntries[] = { @@ -518,7 +623,8 @@ static const spv_operand_desc_t pygen_variable_ScopeEntries[] = { {"Device", 1, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Workgroup", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, {"Subgroup", 3, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, - {"Invocation", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} + {"Invocation", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)}, + {"QueueFamilyKHR", 5, 1, pygen_variable_caps_VulkanMemoryModelKHR, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0)} }; static const spv_operand_desc_t pygen_variable_GroupOperationEntries[] = { @@ -623,6 +729,11 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { {"StorageBuffer8BitAccess", 4448, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_8bit_storage, {}, 0xffffffffu}, {"UniformAndStorageBuffer8BitAccess", 4449, 1, pygen_variable_caps_StorageBuffer8BitAccess, 1, pygen_variable_exts_SPV_KHR_8bit_storage, {}, 0xffffffffu}, {"StoragePushConstant8", 4450, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_8bit_storage, {}, 0xffffffffu}, + {"DenormPreserve", 4464, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_float_controls, {}, 0xffffffffu}, + {"DenormFlushToZero", 4465, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_float_controls, {}, 0xffffffffu}, + {"SignedZeroInfNanPreserve", 4466, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_float_controls, {}, 0xffffffffu}, + {"RoundingModeRTE", 4467, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_float_controls, {}, 0xffffffffu}, + {"RoundingModeRTZ", 4468, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_float_controls, {}, 0xffffffffu}, {"Float16ImageAMD", 5008, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_gpu_shader_half_float_fetch, {}, 0xffffffffu}, {"ImageGatherBiasLodAMD", 5009, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_texture_gather_bias_lod, {}, 0xffffffffu}, {"FragmentMaskAMD", 5010, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, {}, 0xffffffffu}, @@ -636,6 +747,12 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { {"ShaderStereoViewNV", 5259, 1, pygen_variable_caps_ShaderViewportMaskNV, 1, pygen_variable_exts_SPV_NV_stereo_view_rendering, {}, 0xffffffffu}, {"PerViewAttributesNV", 5260, 1, pygen_variable_caps_MultiView, 1, pygen_variable_exts_SPV_NVX_multiview_per_view_attributes, {}, 0xffffffffu}, {"FragmentFullyCoveredEXT", 5265, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_fragment_fully_covered, {}, 0xffffffffu}, + {"MeshShadingNV", 5266, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_NV_mesh_shader, {}, 0xffffffffu}, + {"ImageFootprintNV", 5282, 0, nullptr, 1, pygen_variable_exts_SPV_NV_shader_image_footprint, {}, 0xffffffffu}, + {"FragmentBarycentricNV", 5284, 0, nullptr, 1, pygen_variable_exts_SPV_NV_fragment_shader_barycentric, {}, 0xffffffffu}, + {"ComputeDerivativeGroupQuadsNV", 5288, 0, nullptr, 1, pygen_variable_exts_SPV_NV_compute_shader_derivatives, {}, 0xffffffffu}, + {"FragmentDensityEXT", 5291, 1, pygen_variable_caps_Shader, 2, pygen_variable_exts_SPV_EXT_fragment_invocation_densitySPV_NV_shading_rate, {}, 0xffffffffu}, + {"ShadingRateNV", 5291, 1, pygen_variable_caps_Shader, 2, pygen_variable_exts_SPV_NV_shading_rateSPV_EXT_fragment_invocation_density, {}, 0xffffffffu}, {"GroupNonUniformPartitionedNV", 5297, 0, nullptr, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, {}, 0xffffffffu}, {"ShaderNonUniformEXT", 5301, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, {"RuntimeDescriptorArrayEXT", 5302, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, @@ -649,6 +766,10 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { {"InputAttachmentArrayNonUniformIndexingEXT", 5310, 2, pygen_variable_caps_InputAttachmentShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, {"UniformTexelBufferArrayNonUniformIndexingEXT", 5311, 2, pygen_variable_caps_SampledBufferShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, {"StorageTexelBufferArrayNonUniformIndexingEXT", 5312, 2, pygen_variable_caps_ImageBufferShaderNonUniformEXT, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, 0xffffffffu}, + {"RayTracingNV", 5340, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, 0xffffffffu}, + {"VulkanMemoryModelKHR", 5345, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_vulkan_memory_model, {}, 0xffffffffu}, + {"VulkanMemoryModelDeviceScopeKHR", 5346, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_vulkan_memory_model, {}, 0xffffffffu}, + {"ComputeDerivativeGroupLinearNV", 5350, 0, nullptr, 1, pygen_variable_exts_SPV_NV_compute_shader_derivatives, {}, 0xffffffffu}, {"SubgroupShuffleINTEL", 5568, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_subgroups, {}, 0xffffffffu}, {"SubgroupBufferBlockIOINTEL", 5569, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_subgroups, {}, 0xffffffffu}, {"SubgroupImageBlockIOINTEL", 5570, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_subgroups, {}, 0xffffffffu} diff --git a/3rdparty/spirv-tools/include/spirv-tools/instrument.hpp b/3rdparty/spirv-tools/include/spirv-tools/instrument.hpp new file mode 100644 index 000000000..69d1ad259 --- /dev/null +++ b/3rdparty/spirv-tools/include/spirv-tools/instrument.hpp @@ -0,0 +1,135 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef INCLUDE_SPIRV_TOOLS_INSTRUMENT_HPP_ +#define INCLUDE_SPIRV_TOOLS_INSTRUMENT_HPP_ + +// Shader Instrumentation Interface +// +// This file provides an external interface for applications that wish to +// communicate with shaders instrumented by passes created by: +// +// CreateInstBindlessCheckPass +// +// More detailed documentation of this routine can be found in optimizer.hpp + +namespace spvtools { + +// Stream Output Buffer Offsets +// +// The following values provide 32-bit word offsets into the output buffer +// generated by InstrumentPass::GenDebugStreamWrite. This method is utilized +// by InstBindlessCheckPass. +// +// The first word of the debug output buffer contains the next available word +// in the data stream to be written. Shaders will atomically read and update +// this value so as not to overwrite each others records. This value must be +// initialized to zero +static const int kDebugOutputSizeOffset = 0; + +// The second word of the output buffer is the start of the stream of records +// written by the instrumented shaders. Each record represents a validation +// error. The format of the records is documented below. +static const int kDebugOutputDataOffset = 1; + +// Common Stream Record Offsets +// +// The following are offsets to fields which are common to all records written +// to the output stream. +// +// Each record first contains the size of the record in 32-bit words, including +// the size word. +static const int kInstCommonOutSize = 0; + +// This is the shader id passed by the layer when the instrumentation pass is +// created. +static const int kInstCommonOutShaderId = 1; + +// This is the ordinal position of the instruction within the SPIR-V shader +// which generated the validation error. +static const int kInstCommonOutInstructionIdx = 2; + +// This is the stage which generated the validation error. This word is used +// to determine the contents of the next two words in the record. +// 0:Vert, 1:TessCtrl, 2:TessEval, 3:Geom, 4:Frag, 5:Compute +static const int kInstCommonOutStageIdx = 3; +static const int kInstCommonOutCnt = 4; + +// Stage-specific Stream Record Offsets +// +// Each stage will contain different values in the next two words of the record +// used to identify which instantiation of the shader generated the validation +// error. +// +// Vertex Shader Output Record Offsets +static const int kInstVertOutVertexId = kInstCommonOutCnt; +static const int kInstVertOutInstanceId = kInstCommonOutCnt + 1; + +// Frag Shader Output Record Offsets +static const int kInstFragOutFragCoordX = kInstCommonOutCnt; +static const int kInstFragOutFragCoordY = kInstCommonOutCnt + 1; + +// Compute Shader Output Record Offsets +static const int kInstCompOutGlobalInvocationId = kInstCommonOutCnt; +static const int kInstCompOutUnused = kInstCommonOutCnt + 1; + +// Tessellation Shader Output Record Offsets +static const int kInstTessOutInvocationId = kInstCommonOutCnt; +static const int kInstTessOutUnused = kInstCommonOutCnt + 1; + +// Geometry Shader Output Record Offsets +static const int kInstGeomOutPrimitiveId = kInstCommonOutCnt; +static const int kInstGeomOutInvocationId = kInstCommonOutCnt + 1; + +// Size of Common and Stage-specific Members +static const int kInstStageOutCnt = kInstCommonOutCnt + 2; + +// Validation Error Code +// +// This identifies the validation error. It also helps to identify +// how many words follow in the record and their meaning. +static const int kInstValidationOutError = kInstStageOutCnt; + +// Validation-specific Output Record Offsets +// +// Each different validation will generate a potentially different +// number of words at the end of the record giving more specifics +// about the validation error. +// +// A bindless bounds error will output the index and the bound. +static const int kInstBindlessOutDescIndex = kInstStageOutCnt + 1; +static const int kInstBindlessOutDescBound = kInstStageOutCnt + 2; +static const int kInstBindlessOutCnt = kInstStageOutCnt + 3; + +// Maximum Output Record Member Count +static const int kInstMaxOutCnt = kInstStageOutCnt + 3; + +// Validation Error Codes +// +// These are the possible validation error codes. +static const int kInstErrorBindlessBounds = 0; + +// Debug Buffer Bindings +// +// These are the bindings for the different buffers which are +// read or written by the instrumentation passes. +// +// This is the output buffer written by InstBindlessCheckPass. +static const int kDebugOutputBindingStream = 0; + +} // namespace spvtools + +#endif // INCLUDE_SPIRV_TOOLS_INSTRUMENT_HPP_ diff --git a/3rdparty/spirv-tools/include/spirv-tools/libspirv.h b/3rdparty/spirv-tools/include/spirv-tools/libspirv.h index a7e1b3007..ff7eb6b6c 100644 --- a/3rdparty/spirv-tools/include/spirv-tools/libspirv.h +++ b/3rdparty/spirv-tools/include/spirv-tools/libspirv.h @@ -288,6 +288,12 @@ typedef enum spv_binary_to_text_options_t { SPV_FORCE_32_BIT_ENUM(spv_binary_to_text_options_t) } spv_binary_to_text_options_t; +// Constants + +// The default id bound is to the minimum value for the id limit +// in the spir-v specification under the section "Universal Limits". +const uint32_t kDefaultMaxIdBound = 0x3FFFFF; + // Structures // Information about an operand parsed from a binary SPIR-V module. @@ -360,6 +366,10 @@ typedef struct spv_context_t spv_context_t; typedef struct spv_validator_options_t spv_validator_options_t; +typedef struct spv_optimizer_options_t spv_optimizer_options_t; + +typedef struct spv_reducer_options_t spv_reducer_options_t; + // Type Definitions typedef spv_const_binary_t* spv_const_binary; @@ -371,6 +381,10 @@ typedef const spv_context_t* spv_const_context; typedef spv_context_t* spv_context; typedef spv_validator_options_t* spv_validator_options; typedef const spv_validator_options_t* spv_const_validator_options; +typedef spv_optimizer_options_t* spv_optimizer_options; +typedef const spv_optimizer_options_t* spv_const_optimizer_options; +typedef spv_reducer_options_t* spv_reducer_options; +typedef const spv_reducer_options_t* spv_const_reducer_options; // Platform API @@ -425,6 +439,7 @@ typedef enum { spv_validator_limit_max_function_args, spv_validator_limit_max_control_flow_nesting_depth, spv_validator_limit_max_access_chain_indexes, + spv_validator_limit_max_id_bound, } spv_validator_limit; // Returns a string describing the given SPIR-V target environment. @@ -473,23 +488,85 @@ SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetRelaxStoreStruct( SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetRelaxLogicalPointer( spv_validator_options options, bool val); -// Records whether or not the validator should relax the rules on block layout. +// Records whether the validator should use "relaxed" block layout rules. +// Relaxed layout rules are described by Vulkan extension +// VK_KHR_relaxed_block_layout, and they affect uniform blocks, storage blocks, +// and push constants. // -// When relaxed, it will enable VK_KHR_relaxed_block_layout when validating -// standard uniform/storage block layout. +// This is enabled by default when targeting Vulkan 1.1 or later. +// Relaxed layout is more permissive than the default rules in Vulkan 1.0. SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetRelaxBlockLayout( spv_validator_options options, bool val); +// Records whether the validator should use "scalar" block layout rules. +// Scalar layout rules are more permissive than relaxed block layout. +// +// See Vulkan extnesion VK_EXT_scalar_block_layout. The scalar alignment is +// defined as follows: +// - scalar alignment of a scalar is the scalar size +// - scalar alignment of a vector is the scalar alignment of its component +// - scalar alignment of a matrix is the scalar alignment of its component +// - scalar alignment of an array is the scalar alignment of its element +// - scalar alignment of a struct is the max scalar alignment among its +// members +// +// For a struct in Uniform, StorageClass, or PushConstant: +// - a member Offset must be a multiple of the member's scalar alignment +// - ArrayStride or MatrixStride must be a multiple of the array or matrix +// scalar alignment +SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetScalarBlockLayout( + spv_validator_options options, bool val); + // Records whether or not the validator should skip validating standard // uniform/storage block layout. SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetSkipBlockLayout( spv_validator_options options, bool val); +// Creates an optimizer options object with default options. Returns a valid +// options object. The object remains valid until it is passed into +// |spvOptimizerOptionsDestroy|. +SPIRV_TOOLS_EXPORT spv_optimizer_options spvOptimizerOptionsCreate(void); + +// Destroys the given optimizer options object. +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsDestroy( + spv_optimizer_options options); + +// Records whether or not the optimizer should run the validator before +// optimizing. If |val| is true, the validator will be run. +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetRunValidator( + spv_optimizer_options options, bool val); + +// Records the validator options that should be passed to the validator if it is +// run. +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetValidatorOptions( + spv_optimizer_options options, spv_validator_options val); + +// Records the maximum possible value for the id bound. +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetMaxIdBound( + spv_optimizer_options options, uint32_t val); + +// Creates a reducer options object with default options. Returns a valid +// options object. The object remains valid until it is passed into +// |spvReducerOptionsDestroy|. +SPIRV_TOOLS_EXPORT spv_reducer_options spvReducerOptionsCreate(); + +// Destroys the given reducer options object. +SPIRV_TOOLS_EXPORT void spvReducerOptionsDestroy(spv_reducer_options options); + +// Records the maximum number of reduction steps that should run before the +// reducer gives up. +SPIRV_TOOLS_EXPORT void spvReducerOptionsSetStepLimit( + spv_reducer_options options, uint32_t step_limit); + +// Sets seed for random number generation. +SPIRV_TOOLS_EXPORT void spvReducerOptionsSetSeed(spv_reducer_options options, + uint32_t seed); + // Encodes the given SPIR-V assembly text to its binary representation. The // length parameter specifies the number of bytes for text. Encoded binary will // be stored into *binary. Any error will be written into *diagnostic if -// diagnostic is non-null. The generated binary is independent of the context -// and may outlive it. +// diagnostic is non-null, otherwise the context's message consumer will be +// used. The generated binary is independent of the context and may outlive it. SPIRV_TOOLS_EXPORT spv_result_t spvTextToBinary(const spv_const_context context, const char* text, const size_t length, @@ -511,7 +588,8 @@ SPIRV_TOOLS_EXPORT void spvTextDestroy(spv_text text); // word_count parameter specifies the number of words for binary. The options // parameter is a bit field of spv_binary_to_text_options_t. Decoded text will // be stored into *text. Any error will be written into *diagnostic if -// diagnostic is non-null. +// diagnostic is non-null, otherwise the context's message consumer will be +// used. SPIRV_TOOLS_EXPORT spv_result_t spvBinaryToText(const spv_const_context context, const uint32_t* binary, const size_t word_count, @@ -524,20 +602,22 @@ SPIRV_TOOLS_EXPORT spv_result_t spvBinaryToText(const spv_const_context context, SPIRV_TOOLS_EXPORT void spvBinaryDestroy(spv_binary binary); // Validates a SPIR-V binary for correctness. Any errors will be written into -// *diagnostic if diagnostic is non-null. +// *diagnostic if diagnostic is non-null, otherwise the context's message +// consumer will be used. SPIRV_TOOLS_EXPORT spv_result_t spvValidate(const spv_const_context context, const spv_const_binary binary, spv_diagnostic* diagnostic); // Validates a SPIR-V binary for correctness. Uses the provided Validator // options. Any errors will be written into *diagnostic if diagnostic is -// non-null. +// non-null, otherwise the context's message consumer will be used. SPIRV_TOOLS_EXPORT spv_result_t spvValidateWithOptions( const spv_const_context context, const spv_const_validator_options options, const spv_const_binary binary, spv_diagnostic* diagnostic); // Validates a raw SPIR-V binary for correctness. Any errors will be written -// into *diagnostic if diagnostic is non-null. +// into *diagnostic if diagnostic is non-null, otherwise the context's message +// consumer will be used. SPIRV_TOOLS_EXPORT spv_result_t spvValidateBinary(const spv_const_context context, const uint32_t* words, const size_t num_words, spv_diagnostic* diagnostic); @@ -584,7 +664,8 @@ typedef spv_result_t (*spv_parsed_instruction_fn_t)( // is supplied as context to the callbacks. Returns SPV_SUCCESS on successful // parse where the callbacks always return SPV_SUCCESS. For an invalid parse, // returns a status code other than SPV_SUCCESS, and if diagnostic is non-null -// also emits a diagnostic. If a callback returns anything other than +// also emits a diagnostic. If diagnostic is null the context's message consumer +// will be used to emit any errors. If a callback returns anything other than // SPV_SUCCESS, then that status code is returned, no further callbacks are // issued, and no additional diagnostics are emitted. SPIRV_TOOLS_EXPORT spv_result_t spvBinaryParse( diff --git a/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp b/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp index b6ae38c10..9cb5afe3f 100644 --- a/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp +++ b/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp @@ -82,12 +82,20 @@ class ValidatorOptions { } // Enables VK_KHR_relaxed_block_layout when validating standard - // uniform/storage buffer layout. + // uniform/storage buffer/push-constant layout. If true, disables + // scalar block layout rules. void SetRelaxBlockLayout(bool val) { spvValidatorOptionsSetRelaxBlockLayout(options_, val); } - // Skips validating standard uniform/storage buffer layout. + // Enables VK_EXT_scalar_block_layout when validating standard + // uniform/storage buffer/push-constant layout. If true, disables + // relaxed block layout rules. + void SetScalarBlockLayout(bool val) { + spvValidatorOptionsSetScalarBlockLayout(options_, val); + } + + // Skips validating standard uniform/storage buffer/push-constant layout. void SetSkipBlockLayout(bool val) { spvValidatorOptionsSetSkipBlockLayout(options_, val); } @@ -106,6 +114,58 @@ class ValidatorOptions { spv_validator_options options_; }; +// A C++ wrapper around an optimization options object. +class OptimizerOptions { + public: + OptimizerOptions() : options_(spvOptimizerOptionsCreate()) {} + ~OptimizerOptions() { spvOptimizerOptionsDestroy(options_); } + + // Allow implicit conversion to the underlying object. + operator spv_optimizer_options() const { return options_; } + + // Records whether or not the optimizer should run the validator before + // optimizing. If |run| is true, the validator will be run. + void set_run_validator(bool run) { + spvOptimizerOptionsSetRunValidator(options_, run); + } + + // Records the validator options that should be passed to the validator if it + // is run. + void set_validator_options(const ValidatorOptions& val_options) { + spvOptimizerOptionsSetValidatorOptions(options_, val_options); + } + + // Records the maximum possible value for the id bound. + void set_max_id_bound(uint32_t new_bound) { + spvOptimizerOptionsSetMaxIdBound(options_, new_bound); + } + + private: + spv_optimizer_options options_; +}; + +// A C++ wrapper around a reducer options object. +class ReducerOptions { + public: + ReducerOptions() : options_(spvReducerOptionsCreate()) {} + ~ReducerOptions() { spvReducerOptionsDestroy(options_); } + + // Allow implicit conversion to the underlying object. + operator spv_reducer_options() const { return options_; } + + // Records the maximum number of reduction steps that should + // run before the reducer gives up. + void set_step_limit(uint32_t step_limit) { + spvReducerOptionsSetStepLimit(options_, step_limit); + } + + // Sets a seed to be used for random number generation. + void set_seed(uint32_t seed) { spvReducerOptionsSetSeed(options_, seed); } + + private: + spv_reducer_options options_; +}; + // C++ interface for SPIRV-Tools functionalities. It wraps the context // (including target environment and the corresponding SPIR-V grammar) and // provides methods for assembling, disassembling, and validating. @@ -173,7 +233,7 @@ class SpirvTools { bool Validate(const uint32_t* binary, size_t binary_size) const; // Like the previous overload, but takes an options object. bool Validate(const uint32_t* binary, size_t binary_size, - const ValidatorOptions& options) const; + spv_validator_options options) const; private: struct Impl; // Opaque struct for holding the data fields used by this class. diff --git a/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp b/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp index 4364d9ff5..b2865a80e 100644 --- a/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp +++ b/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp @@ -101,6 +101,11 @@ class Optimizer { // from time to time. Optimizer& RegisterSizePasses(); + // Registers passes that have been prescribed for WebGPU environments. + // This sequence of passes is subject to constant review and will change + // from time to time. + Optimizer& RegisterWebGPUPasses(); + // Registers passes that attempt to legalize the generated code. // // Note: this recipe is specially designed for legalizing SPIR-V. It should be @@ -148,6 +153,10 @@ class Optimizer { // returns false. bool FlagHasValidForm(const std::string& flag) const; + // Allows changing, after creation time, the target environment to be + // optimized for. Should be called before calling Run(). + void SetTargetEnv(const spv_target_env env); + // Optimizes the given SPIR-V module |original_binary| and writes the // optimized binary into |optimized_binary|. // Returns true on successful optimization, whether or not the module is @@ -160,13 +169,20 @@ class Optimizer { bool Run(const uint32_t* original_binary, size_t original_binary_size, std::vector* optimized_binary) const; - // Same as above, except passes |options| to the validator when trying to - // validate the binary. If |skip_validation| is true, then the caller is - // guaranteeing that |original_binary| is valid, and the validator will not - // be run. + // DEPRECATED: Same as above, except passes |options| to the validator when + // trying to validate the binary. If |skip_validation| is true, then the + // caller is guaranteeing that |original_binary| is valid, and the validator + // will not be run. The |max_id_bound| is the limit on the max id in the + // module. bool Run(const uint32_t* original_binary, const size_t original_binary_size, std::vector* optimized_binary, - const ValidatorOptions& options, bool skip_validation = false) const; + const ValidatorOptions& options, bool skip_validation) const; + + // Same as above, except it takes an options object. See the documentation + // for |OptimizerOptions| to see which options can be set. + bool Run(const uint32_t* original_binary, const size_t original_binary_size, + std::vector* optimized_binary, + const spv_optimizer_options opt_options) const; // Returns a vector of strings with all the pass names added to this // optimizer's pass manager. These strings are valid until the associated @@ -492,6 +508,30 @@ Optimizer::PassToken CreateCommonUniformElimPass(); // eliminated with standard dead code elimination. Optimizer::PassToken CreateAggressiveDCEPass(); +// Create line propagation pass +// This pass propagates line information based on the rules for OpLine and +// OpNoline and clones an appropriate line instruction into every instruction +// which does not already have debug line instructions. +// +// This pass is intended to maximize preservation of source line information +// through passes which delete, move and clone instructions. Ideally it should +// be run before any such pass. It is a bookend pass with EliminateDeadLines +// which can be used to remove redundant line instructions at the end of a +// run of such passes and reduce final output file size. +Optimizer::PassToken CreatePropagateLineInfoPass(); + +// Create dead line elimination pass +// This pass eliminates redundant line instructions based on the rules for +// OpLine and OpNoline. Its main purpose is to reduce the size of the file +// need to store the SPIR-V without losing line information. +// +// This is a bookend pass with PropagateLines which attaches line instructions +// to every instruction to preserve line information during passes which +// delete, move and clone instructions. DeadLineElim should be run after +// PropagateLines and all such subsequent passes. Normally it would be one +// of the last passes to be run. +Optimizer::PassToken CreateRedundantLineInfoElimPass(); + // Creates a compact ids pass. // The pass remaps result ids to a compact and gapless range starting from %1. Optimizer::PassToken CreateCompactIdsPass(); @@ -650,6 +690,38 @@ Optimizer::PassToken CreateReduceLoadSizePass(); // them into a single instruction where possible. Optimizer::PassToken CreateCombineAccessChainsPass(); +// Create a pass to instrument bindless descriptor checking +// This pass instruments all bindless references to check that descriptor +// array indices are inbounds. If the reference is invalid, a record is +// written to the debug output buffer (if space allows) and a null value is +// returned. This pass is designed to support bindless validation in the Vulkan +// validation layers. +// +// Dead code elimination should be run after this pass as the original, +// potentially invalid code is not removed and could cause undefined behavior, +// including crashes. It may also be beneficial to run Simplification +// (ie Constant Propagation), DeadBranchElim and BlockMerge after this pass to +// optimize instrument code involving the testing of compile-time constants. +// It is also generally recommended that this pass (and all +// instrumentation passes) be run after any legalization and optimization +// passes. This will give better analysis for the instrumentation and avoid +// potentially de-optimizing the instrument code, for example, inlining +// the debug record output function throughout the module. +// +// The instrumentation will read and write buffers in debug +// descriptor set |desc_set|. It will write |shader_id| in each output record +// to identify the shader module which generated the record. +// +// TODO(greg-lunarg): Add support for vk_ext_descriptor_indexing. +Optimizer::PassToken CreateInstBindlessCheckPass(uint32_t desc_set, + uint32_t shader_id); + +// Create a pass to upgrade to the VulkanKHR memory model. +// This pass upgrades the Logical GLSL450 memory model to Logical VulkanKHR. +// Additionally, it modifies memory, image, atomic and barrier operations to +// conform to that model's requirements. +Optimizer::PassToken CreateUpgradeMemoryModelPass(); + } // namespace spvtools #endif // INCLUDE_SPIRV_TOOLS_OPTIMIZER_HPP_ diff --git a/3rdparty/spirv-tools/kokoro/shaderc-smoketest/build.sh b/3rdparty/spirv-tools/kokoro/shaderc-smoketest/build.sh new file mode 100644 index 000000000..638ca8c61 --- /dev/null +++ b/3rdparty/spirv-tools/kokoro/shaderc-smoketest/build.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# Copyright (c) 2018 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Fail on any error. +set -e +# Display commands being run. +set -x + +BUILD_ROOT=$PWD +GITHUB_DIR=$BUILD_ROOT/github + +SKIP_TESTS="False" +BUILD_TYPE="Release" + +# Get NINJA. +wget -q https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip +unzip -q ninja-linux.zip +export PATH="$PWD:$PATH" + +# Get shaderc. +cd $GITHUB_DIR +git clone https://github.com/google/shaderc.git +SHADERC_DIR=$GITHUB_DIR/shaderc +cd $SHADERC_DIR/third_party + +# Get shaderc dependencies. Link the appropriate SPIRV-Tools. +git clone https://github.com/google/googletest.git +git clone https://github.com/google/glslang.git +ln -s $GITHUB_DIR/SPIRV-Tools spirv-tools +git clone https://github.com/KhronosGroup/SPIRV-Headers.git spirv-headers +git clone https://github.com/google/re2 +git clone https://github.com/google/effcee + +cd $SHADERC_DIR +mkdir build +cd $SHADERC_DIR/build + +# Invoke the build. +BUILD_SHA=${KOKORO_GITHUB_COMMIT:-$KOKORO_GITHUB_PULL_REQUEST_COMMIT} +echo $(date): Starting build... +cmake -GNinja -DRE2_BUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=$BUILD_TYPE .. + +echo $(date): Build glslang... +ninja glslangValidator + +echo $(date): Build everything... +ninja +echo $(date): Build completed. + +echo $(date): Check Shaderc for copyright notices... +ninja check-copyright + +echo $(date): Starting ctest... +if [ $SKIP_TESTS = "False" ] +then + ctest --output-on-failure -j4 +fi +echo $(date): ctest completed. + diff --git a/3rdparty/spirv-tools/kokoro/shaderc-smoketest/continuous.cfg b/3rdparty/spirv-tools/kokoro/shaderc-smoketest/continuous.cfg new file mode 100644 index 000000000..ee151ae1a --- /dev/null +++ b/3rdparty/spirv-tools/kokoro/shaderc-smoketest/continuous.cfg @@ -0,0 +1,17 @@ +# Copyright (c) 2018 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Continuous build configuration. +build_file: "SPIRV-Tools/kokoro/shaderc-smoketest/build.sh" + diff --git a/3rdparty/spirv-tools/kokoro/shaderc-smoketest/presubmit.cfg b/3rdparty/spirv-tools/kokoro/shaderc-smoketest/presubmit.cfg new file mode 100644 index 000000000..4f2ed21b7 --- /dev/null +++ b/3rdparty/spirv-tools/kokoro/shaderc-smoketest/presubmit.cfg @@ -0,0 +1,17 @@ +# Copyright (c) 2018 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Presubmit build configuration. +build_file: "SPIRV-Tools/kokoro/shaderc-smoketest/build.sh" + diff --git a/3rdparty/spirv-tools/source/CMakeLists.txt b/3rdparty/spirv-tools/source/CMakeLists.txt index 4df5de3ad..03efa9196 100644 --- a/3rdparty/spirv-tools/source/CMakeLists.txt +++ b/3rdparty/spirv-tools/source/CMakeLists.txt @@ -25,10 +25,10 @@ set(DEBUGINFO_GRAMMAR_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/extinst.debuginfo.g # file paths into some global lists (*_CPP_DEPENDS). And those global lists are # later used by set_source_files_properties() calls. # function() definitions are not suitable because they create new scopes. -macro(spvtools_core_tables VERSION) - set(GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/spirv.core.grammar.json") - set(GRAMMAR_INSTS_INC_FILE "${spirv-tools_BINARY_DIR}/core.insts-${VERSION}.inc") - set(GRAMMAR_KINDS_INC_FILE "${spirv-tools_BINARY_DIR}/operand.kinds-${VERSION}.inc") +macro(spvtools_core_tables CONFIG_VERSION) + set(GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/spirv.core.grammar.json") + set(GRAMMAR_INSTS_INC_FILE "${spirv-tools_BINARY_DIR}/core.insts-${CONFIG_VERSION}.inc") + set(GRAMMAR_KINDS_INC_FILE "${spirv-tools_BINARY_DIR}/operand.kinds-${CONFIG_VERSION}.inc") add_custom_command(OUTPUT ${GRAMMAR_INSTS_INC_FILE} ${GRAMMAR_KINDS_INC_FILE} COMMAND ${PYTHON_EXECUTABLE} ${GRAMMAR_PROCESSING_SCRIPT} --spirv-core-grammar=${GRAMMAR_JSON_FILE} @@ -36,13 +36,13 @@ macro(spvtools_core_tables VERSION) --core-insts-output=${GRAMMAR_INSTS_INC_FILE} --operand-kinds-output=${GRAMMAR_KINDS_INC_FILE} DEPENDS ${GRAMMAR_PROCESSING_SCRIPT} ${GRAMMAR_JSON_FILE} ${DEBUGINFO_GRAMMAR_JSON_FILE} - COMMENT "Generate info tables for SPIR-V v${VERSION} core instructions and operands.") + COMMENT "Generate info tables for SPIR-V v${CONFIG_VERSION} core instructions and operands.") list(APPEND OPCODE_CPP_DEPENDS ${GRAMMAR_INSTS_INC_FILE}) list(APPEND OPERAND_CPP_DEPENDS ${GRAMMAR_KINDS_INC_FILE}) endmacro(spvtools_core_tables) -macro(spvtools_enum_string_mapping VERSION) - set(GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/spirv.core.grammar.json") +macro(spvtools_enum_string_mapping CONFIG_VERSION) + set(GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/spirv.core.grammar.json") set(GRAMMAR_EXTENSION_ENUM_INC_FILE "${spirv-tools_BINARY_DIR}/extension_enum.inc") set(GRAMMAR_ENUM_STRING_MAPPING_INC_FILE "${spirv-tools_BINARY_DIR}/enum_string_mapping.inc") add_custom_command(OUTPUT ${GRAMMAR_EXTENSION_ENUM_INC_FILE} @@ -53,15 +53,15 @@ macro(spvtools_enum_string_mapping VERSION) --extension-enum-output=${GRAMMAR_EXTENSION_ENUM_INC_FILE} --enum-string-mapping-output=${GRAMMAR_ENUM_STRING_MAPPING_INC_FILE} DEPENDS ${GRAMMAR_PROCESSING_SCRIPT} ${GRAMMAR_JSON_FILE} ${DEBUGINFO_GRAMMAR_JSON_FILE} - COMMENT "Generate enum-string mapping for SPIR-V v${VERSION}.") + COMMENT "Generate enum-string mapping for SPIR-V v${CONFIG_VERSION}.") list(APPEND EXTENSION_H_DEPENDS ${GRAMMAR_EXTENSION_ENUM_INC_FILE}) list(APPEND ENUM_STRING_MAPPING_CPP_DEPENDS ${GRAMMAR_ENUM_STRING_MAPPING_INC_FILE}) endmacro(spvtools_enum_string_mapping) -macro(spvtools_vimsyntax VERSION CLVERSION) - set(GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/spirv.core.grammar.json") - set(GLSL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/extinst.glsl.std.450.grammar.json") - set(OPENCL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/extinst.opencl.std.100.grammar.json") +macro(spvtools_vimsyntax CONFIG_VERSION CLVERSION) + set(GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/spirv.core.grammar.json") + set(GLSL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/extinst.glsl.std.450.grammar.json") + set(OPENCL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/extinst.opencl.std.100.grammar.json") set(VIMSYNTAX_FILE "${spirv-tools_BINARY_DIR}/spvasm.vim") add_custom_command(OUTPUT ${VIMSYNTAX_FILE} COMMAND ${PYTHON_EXECUTABLE} ${VIMSYNTAX_PROCESSING_SCRIPT} @@ -75,29 +75,29 @@ macro(spvtools_vimsyntax VERSION CLVERSION) COMMENT "Generate spvasm.vim: Vim syntax file for SPIR-V assembly.") endmacro(spvtools_vimsyntax) -macro(spvtools_glsl_tables VERSION) - set(CORE_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/spirv.core.grammar.json") - set(GLSL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/extinst.glsl.std.450.grammar.json") +macro(spvtools_glsl_tables CONFIG_VERSION) + set(CORE_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/spirv.core.grammar.json") + set(GLSL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/extinst.glsl.std.450.grammar.json") set(GRAMMAR_INC_FILE "${spirv-tools_BINARY_DIR}/glsl.std.450.insts.inc") add_custom_command(OUTPUT ${GRAMMAR_INC_FILE} COMMAND ${PYTHON_EXECUTABLE} ${GRAMMAR_PROCESSING_SCRIPT} --extinst-glsl-grammar=${GLSL_GRAMMAR_JSON_FILE} --glsl-insts-output=${GRAMMAR_INC_FILE} DEPENDS ${GRAMMAR_PROCESSING_SCRIPT} ${CORE_GRAMMAR_JSON_FILE} ${GLSL_GRAMMAR_JSON_FILE} - COMMENT "Generate info tables for GLSL extended instructions and operands v${VERSION}.") + COMMENT "Generate info tables for GLSL extended instructions and operands v${CONFIG_VERSION}.") list(APPEND EXTINST_CPP_DEPENDS ${GRAMMAR_INC_FILE}) endmacro(spvtools_glsl_tables) -macro(spvtools_opencl_tables VERSION) - set(CORE_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/spirv.core.grammar.json") - set(OPENCL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${VERSION}/extinst.opencl.std.100.grammar.json") +macro(spvtools_opencl_tables CONFIG_VERSION) + set(CORE_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/spirv.core.grammar.json") + set(OPENCL_GRAMMAR_JSON_FILE "${SPIRV_HEADER_INCLUDE_DIR}/spirv/${CONFIG_VERSION}/extinst.opencl.std.100.grammar.json") set(GRAMMAR_INC_FILE "${spirv-tools_BINARY_DIR}/opencl.std.insts.inc") add_custom_command(OUTPUT ${GRAMMAR_INC_FILE} COMMAND ${PYTHON_EXECUTABLE} ${GRAMMAR_PROCESSING_SCRIPT} --extinst-opencl-grammar=${OPENCL_GRAMMAR_JSON_FILE} --opencl-insts-output=${GRAMMAR_INC_FILE} DEPENDS ${GRAMMAR_PROCESSING_SCRIPT} ${CORE_GRAMMAR_JSON_FILE} ${OPENCL_GRAMMAR_JSON_FILE} - COMMENT "Generate info tables for OpenCL extended instructions and operands v${VERSION}.") + COMMENT "Generate info tables for OpenCL extended instructions and operands v${CONFIG_VERSION}.") list(APPEND EXTINST_CPP_DEPENDS ${GRAMMAR_INC_FILE}) endmacro(spvtools_opencl_tables) @@ -110,9 +110,9 @@ macro(spvtools_vendor_tables VENDOR_TABLE) --vendor-insts-output=${INSTS_FILE} DEPENDS ${GRAMMAR_PROCESSING_SCRIPT} ${GRAMMAR_FILE} COMMENT "Generate extended instruction tables for ${VENDOR_TABLE}.") - list(APPEND EXTINST_CPP_DEPENDS ${INSTS_FILE}) add_custom_target(spirv-tools-${VENDOR_TABLE} DEPENDS ${INSTS_FILE}) set_property(TARGET spirv-tools-${VENDOR_TABLE} PROPERTY FOLDER "SPIRV-Tools build") + list(APPEND EXTINST_CPP_DEPENDS spirv-tools-${VENDOR_TABLE}) endmacro(spvtools_vendor_tables) macro(spvtools_extinst_lang_headers NAME GRAMMAR_FILE) @@ -125,9 +125,9 @@ macro(spvtools_extinst_lang_headers NAME GRAMMAR_FILE) --extinst-output-base=${OUTBASE} DEPENDS ${LANG_HEADER_PROCESSING_SCRIPT} ${GRAMMAR_FILE} COMMENT "Generate language specific header for ${NAME}.") - list(APPEND EXTINST_CPP_DEPENDS ${OUT_H}) add_custom_target(spirv-tools-header-${NAME} DEPENDS ${OUT_H}) set_property(TARGET spirv-tools-header-${NAME} PROPERTY FOLDER "SPIRV-Tools build") + list(APPEND EXTINST_CPP_DEPENDS spirv-tools-header-${NAME}) endmacro(spvtools_extinst_lang_headers) spvtools_core_tables("unified1") @@ -159,36 +159,18 @@ list(APPEND OPCODE_CPP_DEPENDS ${GENERATOR_INC_FILE}) # The following .cpp files include the above generated .inc files. # Add those .inc files as their dependencies. # -# Why using such an awkward way? -# * If we use add_custom_target() to define a target to generate all .inc files -# and let ${SPIRV_TOOLS} depend on it, then we need to run ninja twice every -# time the grammar is updated: the first time is for generating those .inc -# files, and the second time is for rebuilding .cpp files, when ninja finds -# out that .inc files are updated. -# * If we use add_custom_command() with PRE_BUILD, then the grammar processing -# script will always run no matter whether the grammar is updated. -# * add_dependencies() is used to add *target* dependencies to a target. -# * The following solution only generates .inc files when the script or the -# grammar files is updated, and in a single ninja run. -set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}/opcode.cpp - PROPERTIES OBJECT_DEPENDS "${OPCODE_CPP_DEPENDS}") -set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}/operand.cpp - PROPERTIES OBJECT_DEPENDS "${OPERAND_CPP_DEPENDS}") -set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}/ext_inst.cpp - PROPERTIES OBJECT_DEPENDS "${EXTINST_CPP_DEPENDS}") -set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}/enum_string_mapping.cpp - PROPERTIES OBJECT_DEPENDS "${ENUM_STRING_MAPPING_CPP_DEPENDS}") +# We need to wrap the .inc files with a custom target to avoid problems when +# multiple targets depend on the same custom command. +add_custom_target(core_tables + DEPENDS ${OPCODE_CPP_DEPENDS} ${OPERAND_CPP_DEPENDS}) +add_custom_target(enum_string_mapping + DEPENDS ${EXTENSION_H_DEPENDS} ${ENUM_STRING_MAPPING_CPP_DEPENDS}) +add_custom_target(extinst_tables + DEPENDS ${EXTINST_CPP_DEPENDS}) set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}/extension.h + ${CMAKE_CURRENT_SOURCE_DIR}/extensions.h PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}/extension.h - PROPERTIES OBJECT_DEPENDS "${EXTENSION_H_DEPENDS}") set(SPIRV_TOOLS_BUILD_VERSION_INC ${spirv-tools_BINARY_DIR}/build-version.inc) @@ -209,8 +191,14 @@ add_custom_target(spirv-tools-build-version DEPENDS ${SPIRV_TOOLS_BUILD_VERSION_INC}) set_property(TARGET spirv-tools-build-version PROPERTY FOLDER "SPIRV-Tools build") +list(APPEND PCH_DEPENDS ${ENUM_STRING_MAPPING_CPP_DEPENDS} ${OPCODE_CPP_DEPENDS} ${OPERAND_CPP_DEPENDS} ${EXTENSION_H_DEPENDS} ${EXTINST_CPP_DEPENDS} ${SPIRV_TOOLS_BUILD_VERSION_INC}) +set_source_files_properties( + ${CMAKE_CURRENT_SOURCE_DIR}/pch_source.cpp + PROPERTIES OBJECT_DEPENDS "${PCH_DEPENDS}") + add_subdirectory(comp) add_subdirectory(opt) +add_subdirectory(reduce) add_subdirectory(link) set(SPIRV_SOURCES @@ -247,6 +235,8 @@ set(SPIRV_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/spirv_constant.h ${CMAKE_CURRENT_SOURCE_DIR}/spirv_definition.h ${CMAKE_CURRENT_SOURCE_DIR}/spirv_endian.h + ${CMAKE_CURRENT_SOURCE_DIR}/spirv_optimizer_options.h + ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reducer_options.h ${CMAKE_CURRENT_SOURCE_DIR}/spirv_target_env.h ${CMAKE_CURRENT_SOURCE_DIR}/spirv_validator_options.h ${CMAKE_CURRENT_SOURCE_DIR}/table.h @@ -273,6 +263,8 @@ set(SPIRV_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/print.cpp ${CMAKE_CURRENT_SOURCE_DIR}/software_version.cpp ${CMAKE_CURRENT_SOURCE_DIR}/spirv_endian.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/spirv_optimizer_options.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/spirv_reducer_options.cpp ${CMAKE_CURRENT_SOURCE_DIR}/spirv_target_env.cpp ${CMAKE_CURRENT_SOURCE_DIR}/spirv_validator_options.cpp ${CMAKE_CURRENT_SOURCE_DIR}/table.cpp @@ -295,7 +287,7 @@ set(SPIRV_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_debug.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_decorations.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_derivatives.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_ext_inst.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_extensions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_execution_limitations.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_function.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_id.cpp @@ -306,9 +298,11 @@ set(SPIRV_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_literals.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_logicals.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_memory.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_memory_semantics.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_mode_setting.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_non_uniform.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_primitives.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_scopes.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/validate_type.cpp ${CMAKE_CURRENT_SOURCE_DIR}/val/decoration.h ${CMAKE_CURRENT_SOURCE_DIR}/val/basic_block.cpp @@ -338,6 +332,8 @@ set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/software_version.cpp PROPERTIES OBJECT_DEPENDS "${SPIRV_TOOLS_BUILD_VERSION_INC}") +spvtools_pch(SPIRV_SOURCES pch_source) + add_library(${SPIRV_TOOLS} ${SPIRV_SOURCES}) spvtools_default_compile_options(${SPIRV_TOOLS}) target_include_directories(${SPIRV_TOOLS} @@ -347,6 +343,7 @@ target_include_directories(${SPIRV_TOOLS} ) set_property(TARGET ${SPIRV_TOOLS} PROPERTY FOLDER "SPIRV-Tools libraries") spvtools_check_symbol_exports(${SPIRV_TOOLS}) +add_dependencies( ${SPIRV_TOOLS} core_tables enum_string_mapping extinst_tables ) add_library(${SPIRV_TOOLS}-shared SHARED ${SPIRV_SOURCES}) spvtools_default_compile_options(${SPIRV_TOOLS}-shared) @@ -362,6 +359,7 @@ target_compile_definitions(${SPIRV_TOOLS}-shared PRIVATE SPIRV_TOOLS_IMPLEMENTATION PUBLIC SPIRV_TOOLS_SHAREDLIB ) +add_dependencies( ${SPIRV_TOOLS}-shared core_tables enum_string_mapping extinst_tables ) if(ENABLE_SPIRV_TOOLS_INSTALL) install(TARGETS ${SPIRV_TOOLS} ${SPIRV_TOOLS}-shared @@ -369,3 +367,8 @@ if(ENABLE_SPIRV_TOOLS_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif(ENABLE_SPIRV_TOOLS_INSTALL) + +if(MSVC) + # Enable parallel builds across four cores for this lib + add_definitions(/MP4) +endif() diff --git a/3rdparty/spirv-tools/source/binary.cpp b/3rdparty/spirv-tools/source/binary.cpp index 6604d8094..636dac8c8 100644 --- a/3rdparty/spirv-tools/source/binary.cpp +++ b/3rdparty/spirv-tools/source/binary.cpp @@ -123,8 +123,8 @@ class Parser { // returned object will be propagated to the current parse's diagnostic // object. spvtools::DiagnosticStream diagnostic(spv_result_t error) { - return spvtools::DiagnosticStream({0, 0, _.word_index}, consumer_, "", - error); + return spvtools::DiagnosticStream({0, 0, _.instruction_count}, consumer_, + "", error); } // Returns a diagnostic stream object with the default parse error code. @@ -179,6 +179,7 @@ class Parser { num_words(num_words_arg), diagnostic(diagnostic_arg), word_index(0), + instruction_count(0), endian(), requires_endian_conversion(false) { // Temporary storage for parser state within a single instruction. @@ -192,6 +193,7 @@ class Parser { size_t num_words; // Number of words in the module. spv_diagnostic* diagnostic; // Where diagnostics go. size_t word_index; // The current position in words. + size_t instruction_count; // The count of processed instructions spv_endianness_t endian; // The endianness of the binary. // Is the SPIR-V binary in a different endiannes from the host native // endianness? @@ -269,6 +271,8 @@ spv_result_t Parser::parseModule() { } spv_result_t Parser::parseInstruction() { + _.instruction_count++; + // The zero values for all members except for opcode are the // correct initial values. spv_parsed_instruction_t inst = {}; diff --git a/3rdparty/spirv-tools/source/ext_inst.cpp b/3rdparty/spirv-tools/source/ext_inst.cpp index a4c00c2ff..08c775eb3 100644 --- a/3rdparty/spirv-tools/source/ext_inst.cpp +++ b/3rdparty/spirv-tools/source/ext_inst.cpp @@ -14,7 +14,6 @@ #include "source/ext_inst.h" -#include #include // DebugInfo extended instruction set. @@ -85,7 +84,6 @@ spv_result_t spvExtInstTableGet(spv_ext_inst_table* pExtInstTable, *pExtInstTable = &kTable_1_0; return SPV_SUCCESS; default: - assert(0 && "Unknown spv_target_env in spvExtInstTableGet()"); return SPV_ERROR_INVALID_TABLE; } } diff --git a/3rdparty/spirv-tools/source/libspirv.cpp b/3rdparty/spirv-tools/source/libspirv.cpp index cbbc4c908..b5fe89766 100644 --- a/3rdparty/spirv-tools/source/libspirv.cpp +++ b/3rdparty/spirv-tools/source/libspirv.cpp @@ -115,7 +115,7 @@ bool SpirvTools::Validate(const uint32_t* binary, } bool SpirvTools::Validate(const uint32_t* binary, const size_t binary_size, - const ValidatorOptions& options) const { + spv_validator_options options) const { spv_const_binary_t the_binary{binary, binary_size}; spv_diagnostic diagnostic = nullptr; bool valid = spvValidateWithOptions(impl_->context, options, &the_binary, diff --git a/3rdparty/spirv-tools/source/opcode.cpp b/3rdparty/spirv-tools/source/opcode.cpp index af34b6460..78c238686 100644 --- a/3rdparty/spirv-tools/source/opcode.cpp +++ b/3rdparty/spirv-tools/source/opcode.cpp @@ -324,6 +324,7 @@ int32_t spvOpcodeGeneratesType(SpvOp op) { case SpvOpTypePipe: case SpvOpTypePipeStorage: case SpvOpTypeNamedBarrier: + case SpvOpTypeAccelerationStructureNV: return true; default: // In particular, OpTypeForwardPointer does not generate a type, @@ -390,10 +391,9 @@ bool spvOpcodeIsBranch(SpvOp opcode) { } } -bool spvOpcodeIsAtomicOp(const SpvOp opcode) { +bool spvOpcodeIsAtomicWithLoad(const SpvOp opcode) { switch (opcode) { case SpvOpAtomicLoad: - case SpvOpAtomicStore: case SpvOpAtomicExchange: case SpvOpAtomicCompareExchange: case SpvOpAtomicCompareExchangeWeak: @@ -409,13 +409,17 @@ bool spvOpcodeIsAtomicOp(const SpvOp opcode) { case SpvOpAtomicOr: case SpvOpAtomicXor: case SpvOpAtomicFlagTestAndSet: - case SpvOpAtomicFlagClear: return true; default: return false; } } +bool spvOpcodeIsAtomicOp(const SpvOp opcode) { + return (spvOpcodeIsAtomicWithLoad(opcode) || opcode == SpvOpAtomicStore || + opcode == SpvOpAtomicFlagClear); +} + bool spvOpcodeIsReturn(SpvOp opcode) { switch (opcode) { case SpvOpReturn: @@ -583,3 +587,19 @@ bool spvOpcodeIsScalarizable(SpvOp opcode) { return false; } } + +bool spvOpcodeIsDebug(SpvOp opcode) { + switch (opcode) { + case SpvOpName: + case SpvOpMemberName: + case SpvOpSource: + case SpvOpSourceContinued: + case SpvOpSourceExtension: + case SpvOpString: + case SpvOpLine: + case SpvOpNoLine: + return true; + default: + return false; + } +} diff --git a/3rdparty/spirv-tools/source/opcode.h b/3rdparty/spirv-tools/source/opcode.h index 5643a64c8..76f9a0e84 100644 --- a/3rdparty/spirv-tools/source/opcode.h +++ b/3rdparty/spirv-tools/source/opcode.h @@ -100,6 +100,10 @@ bool spvOpcodeIsDecoration(const SpvOp opcode); // function only considers core instructions. bool spvOpcodeIsLoad(const SpvOp opcode); +// Returns true if the opcode is an atomic operation that uses the original +// value. +bool spvOpcodeIsAtomicWithLoad(const SpvOp opcode); + // Returns true if the opcode is an atomic operation. bool spvOpcodeIsAtomicOp(const SpvOp opcode); @@ -125,4 +129,8 @@ bool spvOpcodeIsNonUniformGroupOperation(SpvOp opcode); // Returns true if the opcode with vector inputs could be divided into a series // of independent scalar operations that would give the same result. bool spvOpcodeIsScalarizable(SpvOp opcode); + +// Returns true if the given opcode is a debug instruction. +bool spvOpcodeIsDebug(SpvOp opcode); + #endif // SOURCE_OPCODE_H_ diff --git a/3rdparty/spirv-tools/source/operand.cpp b/3rdparty/spirv-tools/source/operand.cpp index c97b13fc6..923074e45 100644 --- a/3rdparty/spirv-tools/source/operand.cpp +++ b/3rdparty/spirv-tools/source/operand.cpp @@ -411,6 +411,21 @@ bool spvIsIdType(spv_operand_type_t type) { } } +bool spvIsInIdType(spv_operand_type_t type) { + if (!spvIsIdType(type)) { + // If it is not an ID it cannot be an input ID. + return false; + } + switch (type) { + // Blacklist non-input IDs. + case SPV_OPERAND_TYPE_TYPE_ID: + case SPV_OPERAND_TYPE_RESULT_ID: + return false; + default: + return true; + } +} + std::function spvOperandCanBeForwardDeclaredFunction( SpvOp opcode) { std::function out; diff --git a/3rdparty/spirv-tools/source/operand.h b/3rdparty/spirv-tools/source/operand.h index 76f16f7ae..15a182583 100644 --- a/3rdparty/spirv-tools/source/operand.h +++ b/3rdparty/spirv-tools/source/operand.h @@ -131,6 +131,9 @@ spv_operand_pattern_t spvAlternatePatternFollowingImmediate( // Is the operand an ID? bool spvIsIdType(spv_operand_type_t type); +// Is the operand an input ID? +bool spvIsInIdType(spv_operand_type_t type); + // Takes the opcode of an instruction and returns // a function object that will return true if the index // of the operand can be forward declared. This function will diff --git a/3rdparty/spirv-tools/source/opt/CMakeLists.txt b/3rdparty/spirv-tools/source/opt/CMakeLists.txt index 83f92fe88..96ee8b319 100644 --- a/3rdparty/spirv-tools/source/opt/CMakeLists.txt +++ b/3rdparty/spirv-tools/source/opt/CMakeLists.txt @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -add_library(SPIRV-Tools-opt +set(SPIRV_TOOLS_OPT_SOURCES aggressive_dead_code_elim_pass.h basic_block.h block_merge_pass.h @@ -46,8 +46,10 @@ add_library(SPIRV-Tools-opt inline_exhaustive_pass.h inline_opaque_pass.h inline_pass.h + inst_bindless_check_pass.h instruction.h instruction_list.h + instrument_pass.h ir_builder.h ir_context.h ir_loader.h @@ -75,6 +77,7 @@ add_library(SPIRV-Tools-opt pass.h pass_manager.h private_to_local_pass.h + process_lines_pass.h propagator.h reduce_load_size.h redundancy_elimination.h @@ -91,10 +94,12 @@ add_library(SPIRV-Tools-opt strength_reduction_pass.h strip_debug_info_pass.h strip_reflect_info_pass.h + struct_cfg_analysis.h tree_iterator.h type_manager.h types.h unify_const_pass.h + upgrade_memory_model.h value_number_table.h vector_dce.h workaround1209.h @@ -133,8 +138,10 @@ add_library(SPIRV-Tools-opt inline_exhaustive_pass.cpp inline_opaque_pass.cpp inline_pass.cpp + inst_bindless_check_pass.cpp instruction.cpp instruction_list.cpp + instrument_pass.cpp ir_context.cpp ir_loader.cpp licm_pass.cpp @@ -160,6 +167,7 @@ add_library(SPIRV-Tools-opt pass.cpp pass_manager.cpp private_to_local_pass.cpp + process_lines_pass.cpp propagator.cpp reduce_load_size.cpp redundancy_elimination.cpp @@ -175,14 +183,25 @@ add_library(SPIRV-Tools-opt strength_reduction_pass.cpp strip_debug_info_pass.cpp strip_reflect_info_pass.cpp + struct_cfg_analysis.cpp type_manager.cpp types.cpp unify_const_pass.cpp + upgrade_memory_model.cpp value_number_table.cpp vector_dce.cpp workaround1209.cpp ) +if(MSVC) + # Enable parallel builds across four cores for this lib + add_definitions(/MP4) +endif() + +spvtools_pch(SPIRV_TOOLS_OPT_SOURCES pch_source_opt) + +add_library(SPIRV-Tools-opt ${SPIRV_TOOLS_OPT_SOURCES}) + spvtools_default_compile_options(SPIRV-Tools-opt) target_include_directories(SPIRV-Tools-opt PUBLIC ${spirv-tools_SOURCE_DIR}/include @@ -202,4 +221,3 @@ if(ENABLE_SPIRV_TOOLS_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif(ENABLE_SPIRV_TOOLS_INSTALL) - diff --git a/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp index faf278aa6..82d749905 100644 --- a/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp @@ -142,8 +142,9 @@ bool AggressiveDCEPass::AllExtensionsSupported() const { bool AggressiveDCEPass::IsDead(Instruction* inst) { if (IsLive(inst)) return false; - if (inst->IsBranch() && !IsStructuredHeader(context()->get_instr_block(inst), - nullptr, nullptr, nullptr)) + if ((inst->IsBranch() || inst->opcode() == SpvOpUnreachable) && + !IsStructuredHeader(context()->get_instr_block(inst), nullptr, nullptr, + nullptr)) return false; return true; } @@ -195,6 +196,7 @@ bool AggressiveDCEPass::IsStructuredHeader(BasicBlock* bp, void AggressiveDCEPass::ComputeBlock2HeaderMaps( std::list& structuredOrder) { block2headerBranch_.clear(); + header2nextHeaderBranch_.clear(); branch2merge_.clear(); structured_order_index_.clear(); std::stack currentHeaderBranch; @@ -217,8 +219,10 @@ void AggressiveDCEPass::ComputeBlock2HeaderMaps( uint32_t mergeBlockId; bool is_header = IsStructuredHeader(*bi, &mergeInst, &branchInst, &mergeBlockId); + // Map header block to next enclosing header. + if (is_header) header2nextHeaderBranch_[*bi] = currentHeaderBranch.top(); // If this is a loop header, update state first so the block will map to - // the loop. + // itself. if (is_header && mergeInst->opcode() == SpvOpLoopMerge) { currentHeaderBranch.push(branchInst); branch2merge_[branchInst] = mergeInst; @@ -380,7 +384,8 @@ bool AggressiveDCEPass::AggressiveDCE(Function* func) { } break; case SpvOpSwitch: case SpvOpBranch: - case SpvOpBranchConditional: { + case SpvOpBranchConditional: + case SpvOpUnreachable: { if (assume_branches_live.top()) { AddToWorklist(&*ii); } @@ -427,24 +432,30 @@ bool AggressiveDCEPass::AggressiveDCE(Function* func) { AddToWorklist(get_def_use_mgr()->GetDef(liveInst->type_id())); } // If in a structured if or loop construct, add the controlling - // conditional branch and its merge. Any containing control construct - // is marked live when the merge and branch are processed out of the - // worklist. + // conditional branch and its merge. BasicBlock* blk = context()->get_instr_block(liveInst); Instruction* branchInst = block2headerBranch_[blk]; if (branchInst != nullptr) { AddToWorklist(branchInst); Instruction* mergeInst = branch2merge_[branchInst]; AddToWorklist(mergeInst); - AddBreaksAndContinuesToWorklist(mergeInst); + } + // If the block is a header, add the next outermost controlling + // conditional branch and its merge. + Instruction* nextBranchInst = header2nextHeaderBranch_[blk]; + if (nextBranchInst != nullptr) { + AddToWorklist(nextBranchInst); + Instruction* mergeInst = branch2merge_[nextBranchInst]; + AddToWorklist(mergeInst); } // If local load, add all variable's stores if variable not already live - if (liveInst->opcode() == SpvOpLoad) { + if (liveInst->opcode() == SpvOpLoad || liveInst->IsAtomicWithLoad()) { uint32_t varId; (void)GetPtr(liveInst, &varId); if (varId != 0) { ProcessLoad(varId); } + // Process memory copies like loads } else if (liveInst->opcode() == SpvOpCopyMemory || liveInst->opcode() == SpvOpCopyMemorySized) { uint32_t varId; @@ -453,6 +464,10 @@ bool AggressiveDCEPass::AggressiveDCE(Function* func) { if (varId != 0) { ProcessLoad(varId); } + // If merge, add other branches that are part of its control structure + } else if (liveInst->opcode() == SpvOpLoopMerge || + liveInst->opcode() == SpvOpSelectionMerge) { + AddBreaksAndContinuesToWorklist(liveInst); // If function call, treat as if it loads from all pointer arguments } else if (liveInst->opcode() == SpvOpFunctionCall) { liveInst->ForEachInId([this](const uint32_t* iid) { @@ -540,6 +555,14 @@ Pass::Status AggressiveDCEPass::ProcessImpl() { // return unmodified. if (!AllExtensionsSupported()) return Status::SuccessWithoutChange; + // If the decoration manager is kept live then the context will try to keep it + // up to date. ADCE deals with group decorations by changing the operands in + // |OpGroupDecorate| instruction directly without informing the decoration + // manager. This can put it in an invalid state which will cause an error + // when the context tries to update it. To avoid this problem invalidate + // the decoration manager upfront. + context()->InvalidateAnalyses(IRContext::Analysis::kAnalysisDecorations); + // Eliminate Dead functions. bool modified = EliminateDeadFunctions(); @@ -547,7 +570,7 @@ Pass::Status AggressiveDCEPass::ProcessImpl() { // Process all entry point functions. ProcessFunction pfn = [this](Function* fp) { return AggressiveDCE(fp); }; - modified |= ProcessEntryPointCallTree(pfn, get_module()); + modified |= context()->ProcessEntryPointCallTree(pfn); // Process module-level instructions. Now that all live instructions have // been marked, it is safe to remove dead global values. @@ -560,7 +583,7 @@ Pass::Status AggressiveDCEPass::ProcessImpl() { // Cleanup all CFG including all unreachable blocks. ProcessFunction cleanup = [this](Function* f) { return CFGCleanup(f); }; - modified |= ProcessEntryPointCallTree(cleanup, get_module()); + modified |= context()->ProcessEntryPointCallTree(cleanup); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } @@ -574,7 +597,7 @@ bool AggressiveDCEPass::EliminateDeadFunctions() { live_function_set.insert(fp); return false; }; - ProcessEntryPointCallTree(mark_live, get_module()); + context()->ProcessEntryPointCallTree(mark_live); bool modified = false; for (auto funcIter = get_module()->begin(); @@ -627,17 +650,37 @@ bool AggressiveDCEPass::ProcessGlobalValues() { switch (annotation->opcode()) { case SpvOpDecorate: case SpvOpMemberDecorate: - case SpvOpDecorateId: case SpvOpDecorateStringGOOGLE: + case SpvOpMemberDecorateStringGOOGLE: if (IsTargetDead(annotation)) { context()->KillInst(annotation); modified = true; } break; + case SpvOpDecorateId: + if (IsTargetDead(annotation)) { + context()->KillInst(annotation); + modified = true; + } else { + if (annotation->GetSingleWordInOperand(1) == + SpvDecorationHlslCounterBufferGOOGLE) { + // HlslCounterBuffer will reference an id other than the target. + // If that id is dead, then the decoration can be removed as well. + uint32_t counter_buffer_id = annotation->GetSingleWordInOperand(2); + Instruction* counter_buffer_inst = + get_def_use_mgr()->GetDef(counter_buffer_id); + if (IsDead(counter_buffer_inst)) { + context()->KillInst(annotation); + modified = true; + } + } + } + break; case SpvOpGroupDecorate: { // Go through the targets of this group decorate. Remove each dead // target. If all targets are dead, remove this decoration. bool dead = true; + bool removed_operand = false; for (uint32_t i = 1; i < annotation->NumOperands();) { Instruction* opInst = get_def_use_mgr()->GetDef(annotation->GetSingleWordOperand(i)); @@ -645,6 +688,7 @@ bool AggressiveDCEPass::ProcessGlobalValues() { // Don't increment |i|. annotation->RemoveOperand(i); modified = true; + removed_operand = true; } else { i++; dead = false; @@ -653,6 +697,8 @@ bool AggressiveDCEPass::ProcessGlobalValues() { if (dead) { context()->KillInst(annotation); modified = true; + } else if (removed_operand) { + context()->UpdateDefUse(annotation); } break; } @@ -661,6 +707,7 @@ bool AggressiveDCEPass::ProcessGlobalValues() { // dead target (and member index). If all targets are dead, remove this // decoration. bool dead = true; + bool removed_operand = false; for (uint32_t i = 1; i < annotation->NumOperands();) { Instruction* opInst = get_def_use_mgr()->GetDef(annotation->GetSingleWordOperand(i)); @@ -669,6 +716,7 @@ bool AggressiveDCEPass::ProcessGlobalValues() { annotation->RemoveOperand(i + 1); annotation->RemoveOperand(i); modified = true; + removed_operand = true; } else { i += 2; dead = false; @@ -677,6 +725,8 @@ bool AggressiveDCEPass::ProcessGlobalValues() { if (dead) { context()->KillInst(annotation); modified = true; + } else if (removed_operand) { + context()->UpdateDefUse(annotation); } break; } @@ -749,6 +799,13 @@ void AggressiveDCEPass::InitExtensions() { "SPV_GOOGLE_hlsl_functionality1", "SPV_NV_shader_subgroup_partitioned", "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_EXT_fragment_invocation_density", }); } diff --git a/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.h b/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.h index 3c03cc66b..c043a96f4 100644 --- a/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.h +++ b/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.h @@ -49,7 +49,9 @@ class AggressiveDCEPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping; + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: @@ -107,8 +109,8 @@ class AggressiveDCEPass : public MemPass { bool IsStructuredHeader(BasicBlock* bp, Instruction** mergeInst, Instruction** branchInst, uint32_t* mergeBlockId); - // Initialize block2headerBranch_ and branch2merge_ using |structuredOrder| - // to order blocks. + // Initialize block2headerBranch_, header2nextHeaderBranch_, and + // branch2merge_ using |structuredOrder| to order blocks. void ComputeBlock2HeaderMaps(std::list& structuredOrder); // Add branch to |labelId| to end of block |bp|. @@ -163,6 +165,12 @@ class AggressiveDCEPass : public MemPass { // of an enclosing construct's header, if one exists. std::unordered_map block2headerBranch_; + // Map from header block to the branch instruction in the header of the + // structured construct enclosing it. + // The liveness algorithm is designed to iteratively mark as live all + // structured constructs enclosing a live instruction. + std::unordered_map header2nextHeaderBranch_; + // Maps basic block to their index in the structured order traversal. std::unordered_map structured_order_index_; diff --git a/3rdparty/spirv-tools/source/opt/basic_block.cpp b/3rdparty/spirv-tools/source/opt/basic_block.cpp index b18b114a5..aafee5143 100644 --- a/3rdparty/spirv-tools/source/opt/basic_block.cpp +++ b/3rdparty/spirv-tools/source/opt/basic_block.cpp @@ -35,9 +35,18 @@ const uint32_t kSelectionMergeMergeBlockIdInIdx = 0; BasicBlock* BasicBlock::Clone(IRContext* context) const { BasicBlock* clone = new BasicBlock( std::unique_ptr(GetLabelInst()->Clone(context))); - for (const auto& inst : insts_) + for (const auto& inst : insts_) { // Use the incoming context clone->AddInstruction(std::unique_ptr(inst.Clone(context))); + } + + if (context->AreAnalysesValid( + IRContext::Analysis::kAnalysisInstrToBlockMapping)) { + for (auto& inst : *clone) { + context->set_instr_block(&inst, clone); + } + } + return clone; } @@ -193,6 +202,10 @@ std::ostream& operator<<(std::ostream& str, const BasicBlock& block) { return str; } +void BasicBlock::Dump() const { + std::cerr << "Basic block #" << id() << "\n" << *this << "\n "; +} + std::string BasicBlock::PrettyPrint(uint32_t options) const { std::ostringstream str; ForEachInst([&str, options](const Instruction* inst) { @@ -208,8 +221,11 @@ BasicBlock* BasicBlock::SplitBasicBlock(IRContext* context, uint32_t label_id, iterator iter) { assert(!insts_.empty()); - BasicBlock* new_block = new BasicBlock(MakeUnique( - context, SpvOpLabel, 0, label_id, std::initializer_list{})); + std::unique_ptr new_block_temp = + MakeUnique(MakeUnique( + context, SpvOpLabel, 0, label_id, std::initializer_list{})); + BasicBlock* new_block = new_block_temp.get(); + function_->InsertBasicBlockAfter(std::move(new_block_temp), this); new_block->insts_.Splice(new_block->end(), &insts_, iter, end()); new_block->SetParent(GetParent()); diff --git a/3rdparty/spirv-tools/source/opt/basic_block.h b/3rdparty/spirv-tools/source/opt/basic_block.h index 9e1706e14..ff3a41280 100644 --- a/3rdparty/spirv-tools/source/opt/basic_block.h +++ b/3rdparty/spirv-tools/source/opt/basic_block.h @@ -54,6 +54,9 @@ class BasicBlock { // // The parent function will default to null and needs to be explicitly set by // the user. + // + // If the inst-to-block map in |context| is valid, then the new instructions + // will be inserted into the map. BasicBlock* Clone(IRContext*) const; // Sets the enclosing function for this basic block. @@ -68,6 +71,9 @@ class BasicBlock { // Appends all of block's instructions (except label) to this block inline void AddInstructions(BasicBlock* bp); + // The pointer to the label starting this basic block. + std::unique_ptr& GetLabel() { return label_; } + // The label starting this basic block. Instruction* GetLabelInst() { return label_.get(); } const Instruction* GetLabelInst() const { return label_.get(); } @@ -198,7 +204,8 @@ class BasicBlock { // Splits this basic block into two. Returns a new basic block with label // |labelId| containing the instructions from |iter| onwards. Instructions - // prior to |iter| remain in this basic block. + // prior to |iter| remain in this basic block. The new block will be added + // to the function immediately after the original block. BasicBlock* SplitBasicBlock(IRContext* context, uint32_t label_id, iterator iter); @@ -209,6 +216,10 @@ class BasicBlock { // is always added to |options|. std::string PrettyPrint(uint32_t options = 0u) const; + // Dump this basic block on stderr. Useful when running interactive + // debuggers. + void Dump() const; + private: // The enclosing function. Function* function_; diff --git a/3rdparty/spirv-tools/source/opt/block_merge_pass.cpp b/3rdparty/spirv-tools/source/opt/block_merge_pass.cpp index aa4c1bd92..09deb217a 100644 --- a/3rdparty/spirv-tools/source/opt/block_merge_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/block_merge_pass.cpp @@ -24,19 +24,6 @@ namespace spvtools { namespace opt { -void BlockMergePass::KillInstAndName(Instruction* inst) { - std::vector to_kill; - get_def_use_mgr()->ForEachUser(inst, [&to_kill](Instruction* user) { - if (user->opcode() == SpvOpName) { - to_kill.push_back(user); - } - }); - for (auto i : to_kill) { - context()->KillInst(i); - } - context()->KillInst(inst); -} - bool BlockMergePass::MergeBlocks(Function* func) { bool modified = false; for (auto bi = func->begin(); bi != func->end();) { @@ -55,14 +42,6 @@ bool BlockMergePass::MergeBlocks(Function* func) { continue; } - bool pred_is_header = IsHeader(&*bi); - bool succ_is_header = IsHeader(lab_id); - if (pred_is_header && succ_is_header) { - // Cannot merge two headers together. - ++bi; - continue; - } - bool pred_is_merge = IsMerge(&*bi); bool succ_is_merge = IsMerge(lab_id); if (pred_is_merge && succ_is_merge) { @@ -72,7 +51,16 @@ bool BlockMergePass::MergeBlocks(Function* func) { } Instruction* merge_inst = bi->GetMergeInst(); + bool pred_is_header = IsHeader(&*bi); if (pred_is_header && lab_id != merge_inst->GetSingleWordInOperand(0u)) { + bool succ_is_header = IsHeader(lab_id); + if (pred_is_header && succ_is_header) { + // Cannot merge two headers together when the successor is not the merge + // block of the predecessor. + ++bi; + continue; + } + // If this is a header block and the successor is not its merge, we must // be careful about which blocks we are willing to merge together. // OpLoopMerge must be followed by a conditional or unconditional branch. @@ -116,7 +104,7 @@ bool BlockMergePass::MergeBlocks(Function* func) { } } context()->ReplaceAllUsesWith(lab_id, bi->id()); - KillInstAndName(sbi->GetLabelInst()); + context()->KillInst(sbi->GetLabelInst()); (void)sbi.Erase(); // Reprocess block. modified = true; @@ -148,7 +136,7 @@ bool BlockMergePass::IsMerge(BasicBlock* block) { return IsMerge(block->id()); } Pass::Status BlockMergePass::Process() { // Process all entry point functions. ProcessFunction pfn = [this](Function* fp) { return MergeBlocks(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } diff --git a/3rdparty/spirv-tools/source/opt/block_merge_pass.h b/3rdparty/spirv-tools/source/opt/block_merge_pass.h index 0ecde4884..3ae7a5c00 100644 --- a/3rdparty/spirv-tools/source/opt/block_merge_pass.h +++ b/3rdparty/spirv-tools/source/opt/block_merge_pass.h @@ -44,12 +44,11 @@ class BlockMergePass : public Pass { return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: - // Kill any OpName instruction referencing |inst|, then kill |inst|. - void KillInstAndName(Instruction* inst); // Search |func| for blocks which have a single Branch to a block // with no other predecessors. Merge these blocks into a single block. diff --git a/3rdparty/spirv-tools/source/opt/ccp_pass.cpp b/3rdparty/spirv-tools/source/opt/ccp_pass.cpp index a8411d9fe..835619530 100644 --- a/3rdparty/spirv-tools/source/opt/ccp_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/ccp_pass.cpp @@ -319,7 +319,7 @@ Pass::Status CCPPass::Process() { // Process all entry point functions. ProcessFunction pfn = [this](Function* fp) { return PropagateConstants(fp); }; - bool modified = ProcessReachableCallTree(pfn, context()); + bool modified = context()->ProcessReachableCallTree(pfn); return modified ? Pass::Status::SuccessWithChange : Pass::Status::SuccessWithoutChange; } diff --git a/3rdparty/spirv-tools/source/opt/ccp_pass.h b/3rdparty/spirv-tools/source/opt/ccp_pass.h index 178fd1281..527f459c5 100644 --- a/3rdparty/spirv-tools/source/opt/ccp_pass.h +++ b/3rdparty/spirv-tools/source/opt/ccp_pass.h @@ -40,7 +40,8 @@ class CCPPass : public MemPass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/cfg.cpp b/3rdparty/spirv-tools/source/opt/cfg.cpp index dcf2b573f..7e1097e38 100644 --- a/3rdparty/spirv-tools/source/opt/cfg.cpp +++ b/3rdparty/spirv-tools/source/opt/cfg.cpp @@ -167,6 +167,13 @@ BasicBlock* CFG::SplitLoopHeader(BasicBlock* bb) { Function* fn = bb->GetParent(); IRContext* context = module_->context(); + // Get the new header id up front. If we are out of ids, then we cannot split + // the loop. + uint32_t new_header_id = context->TakeNextId(); + if (new_header_id == 0) { + return nullptr; + } + // Find the insertion point for the new bb. Function::iterator header_it = std::find_if( fn->begin(), fn->end(), @@ -197,15 +204,7 @@ BasicBlock* CFG::SplitLoopHeader(BasicBlock* bb) { ++iter; } - std::unique_ptr newBlock( - bb->SplitBasicBlock(context, context->TakeNextId(), iter)); - - // Insert the new bb in the correct position - auto insert_pos = header_it; - ++insert_pos; - BasicBlock* new_header = &*insert_pos.InsertBefore(std::move(newBlock)); - new_header->SetParent(fn); - uint32_t new_header_id = new_header->id(); + BasicBlock* new_header = bb->SplitBasicBlock(context, new_header_id, iter); context->AnalyzeDefUse(new_header->GetLabelInst()); // Update cfg diff --git a/3rdparty/spirv-tools/source/opt/cfg.h b/3rdparty/spirv-tools/source/opt/cfg.h index 375d09c5c..5ff3aa03e 100644 --- a/3rdparty/spirv-tools/source/opt/cfg.h +++ b/3rdparty/spirv-tools/source/opt/cfg.h @@ -78,8 +78,13 @@ class CFG { BasicBlock* bb, const std::function& f); // Registers |blk| as a basic block in the cfg, this also updates the - // predecessor lists of each successor of |blk|. + // predecessor lists of each successor of |blk|. |blk| must have a terminator + // instruction at the end of the block. void RegisterBlock(BasicBlock* blk) { + assert(blk->begin() != blk->end() && + "Basic blocks must have a terminator before registering."); + assert(blk->tail()->IsBlockTerminator() && + "Basic blocks must have a terminator before registering."); uint32_t blk_id = blk->id(); id2block_[blk_id] = blk; AddEdges(blk); @@ -123,7 +128,8 @@ class CFG { // id as |block| and will become a preheader for the loop. The other block // is a new block that will be the new loop header. // - // Returns a pointer to the new loop header. + // Returns a pointer to the new loop header. Returns |nullptr| if the new + // loop pointer could not be created. BasicBlock* SplitLoopHeader(BasicBlock* bb); private: diff --git a/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.cpp b/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.cpp index 2d548462b..6d48637a4 100644 --- a/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.cpp @@ -30,7 +30,7 @@ namespace opt { Pass::Status CFGCleanupPass::Process() { // Process all entry point functions. ProcessFunction pfn = [this](Function* fp) { return CFGCleanup(fp); }; - bool modified = ProcessReachableCallTree(pfn, context()); + bool modified = context()->ProcessReachableCallTree(pfn); return modified ? Pass::Status::SuccessWithChange : Pass::Status::SuccessWithoutChange; } diff --git a/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.h b/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.h index afbc67c09..509542890 100644 --- a/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.h +++ b/3rdparty/spirv-tools/source/opt/cfg_cleanup_pass.h @@ -30,7 +30,8 @@ class CFGCleanupPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse; + return IRContext::kAnalysisDefUse | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } }; diff --git a/3rdparty/spirv-tools/source/opt/combine_access_chains.h b/3rdparty/spirv-tools/source/opt/combine_access_chains.h index 75885dada..531209ec1 100644 --- a/3rdparty/spirv-tools/source/opt/combine_access_chains.h +++ b/3rdparty/spirv-tools/source/opt/combine_access_chains.h @@ -33,7 +33,8 @@ class CombineAccessChains : public Pass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/common_uniform_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/common_uniform_elim_pass.cpp index e6426a555..52d279fdb 100644 --- a/3rdparty/spirv-tools/source/opt/common_uniform_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/common_uniform_elim_pass.cpp @@ -282,6 +282,7 @@ bool CommonUniformElimPass::UniformAccessChainConvert(Function* func) { uint32_t replId; GenACLoadRepl(ptrInst, &newInsts, &replId); inst = ReplaceAndDeleteLoad(inst, replId, ptrInst); + assert(inst->opcode() != SpvOpPhi); inst = inst->InsertBefore(std::move(newInsts)); modified = true; } @@ -355,6 +356,10 @@ bool CommonUniformElimPass::CommonUniformLoadElimination(Function* func) { if (mergeBlockId == bp->id()) { mergeBlockId = 0; insertItr = bp->begin(); + while (insertItr->opcode() == SpvOpPhi) { + ++insertItr; + } + // Update insertItr until it will not be removed. Without this code, // ReplaceAndDeleteLoad() can set |insertItr| as a dangling pointer. while (IsUniformLoadToBeRemoved(&*insertItr)) ++insertItr; @@ -526,7 +531,7 @@ Pass::Status CommonUniformElimPass::ProcessImpl() { ProcessFunction pfn = [this](Function* fp) { return EliminateCommonUniform(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } @@ -573,6 +578,13 @@ void CommonUniformElimPass::InitExtensions() { "SPV_GOOGLE_hlsl_functionality1", "SPV_NV_shader_subgroup_partitioned", "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_EXT_fragment_invocation_density", }); } diff --git a/3rdparty/spirv-tools/source/opt/constants.cpp b/3rdparty/spirv-tools/source/opt/constants.cpp index ecb5f97c4..768364be8 100644 --- a/3rdparty/spirv-tools/source/opt/constants.cpp +++ b/3rdparty/spirv-tools/source/opt/constants.cpp @@ -165,6 +165,7 @@ std::vector ConstantManager::GetConstantsFromIds( Instruction* ConstantManager::BuildInstructionAndAddToModule( const Constant* new_const, Module::inst_iterator* pos, uint32_t type_id) { + // TODO(1841): Handle id overflow. uint32_t new_id = context()->TakeNextId(); auto new_inst = CreateInstruction(new_id, new_const, type_id); if (!new_inst) { diff --git a/3rdparty/spirv-tools/source/opt/constants.h b/3rdparty/spirv-tools/source/opt/constants.h index 2415c122e..de2dfc3d0 100644 --- a/3rdparty/spirv-tools/source/opt/constants.h +++ b/3rdparty/spirv-tools/source/opt/constants.h @@ -15,7 +15,7 @@ #ifndef SOURCE_OPT_CONSTANTS_H_ #define SOURCE_OPT_CONSTANTS_H_ -#include +#include #include #include #include diff --git a/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp b/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp index 028b237d7..e508c05d1 100644 --- a/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp +++ b/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp @@ -26,6 +26,8 @@ const uint32_t kLoadPointerInOperand = 0; const uint32_t kStorePointerInOperand = 0; const uint32_t kStoreObjectInOperand = 1; const uint32_t kCompositeExtractObjectInOperand = 0; +const uint32_t kTypePointerStorageClassInIdx = 0; +const uint32_t kTypePointerPointeeInIdx = 1; } // namespace @@ -51,7 +53,7 @@ Pass::Status CopyPropagateArrays::Process() { FindSourceObjectIfPossible(&*var_inst, store_inst); if (source_object != nullptr) { - if (CanUpdateUses(&*var_inst, source_object->GetPointerTypeId())) { + if (CanUpdateUses(&*var_inst, source_object->GetPointerTypeId(this))) { modified = true; PropagateObject(&*var_inst, source_object.get(), store_inst); } @@ -139,7 +141,7 @@ Instruction* CopyPropagateArrays::BuildNewAccessChain( return source->GetVariable(); } - return builder.AddAccessChain(source->GetPointerTypeId(), + return builder.AddAccessChain(source->GetPointerTypeId(this), source->GetVariable()->result_id(), source->AccessChain()); } @@ -324,6 +326,10 @@ CopyPropagateArrays::BuildMemoryObjectFromCompositeConstruct( std::unique_ptr member_object = GetSourceObjectIfAny(conststruct_inst->GetSingleWordInOperand(i)); + if (!member_object) { + return nullptr; + } + if (!member_object->IsMember()) { return nullptr; } @@ -484,80 +490,76 @@ bool CopyPropagateArrays::CanUpdateUses(Instruction* original_ptr_inst, return true; } - return def_use_mgr->WhileEachUse( - original_ptr_inst, - [this, type_mgr, const_mgr, type](Instruction* use, uint32_t) { - switch (use->opcode()) { - case SpvOpLoad: { - analysis::Pointer* pointer_type = type->AsPointer(); - uint32_t new_type_id = - type_mgr->GetId(pointer_type->pointee_type()); + return def_use_mgr->WhileEachUse(original_ptr_inst, [this, type_mgr, + const_mgr, + type](Instruction* use, + uint32_t) { + switch (use->opcode()) { + case SpvOpLoad: { + analysis::Pointer* pointer_type = type->AsPointer(); + uint32_t new_type_id = type_mgr->GetId(pointer_type->pointee_type()); - if (new_type_id != use->type_id()) { - return CanUpdateUses(use, new_type_id); - } - return true; - } - case SpvOpAccessChain: { - analysis::Pointer* pointer_type = type->AsPointer(); - const analysis::Type* pointee_type = pointer_type->pointee_type(); - - std::vector access_chain; - for (uint32_t i = 1; i < use->NumInOperands(); ++i) { - const analysis::Constant* index_const = - const_mgr->FindDeclaredConstant( - use->GetSingleWordInOperand(i)); - if (index_const) { - access_chain.push_back(index_const->AsIntConstant()->GetU32()); - } else { - // Variable index means the type is a type where every element - // is the same type. Use element 0 to get the type. - access_chain.push_back(0); - } - } - - const analysis::Type* new_pointee_type = - type_mgr->GetMemberType(pointee_type, access_chain); - analysis::Pointer pointerTy(new_pointee_type, - pointer_type->storage_class()); - uint32_t new_pointer_type_id = - context()->get_type_mgr()->GetTypeInstruction(&pointerTy); - - if (new_pointer_type_id != use->type_id()) { - return CanUpdateUses(use, new_pointer_type_id); - } - return true; - } - case SpvOpCompositeExtract: { - std::vector access_chain; - for (uint32_t i = 1; i < use->NumInOperands(); ++i) { - access_chain.push_back(use->GetSingleWordInOperand(i)); - } - - const analysis::Type* new_type = - type_mgr->GetMemberType(type, access_chain); - uint32_t new_type_id = type_mgr->GetTypeInstruction(new_type); - - if (new_type_id != use->type_id()) { - return CanUpdateUses(use, new_type_id); - } - return true; - } - case SpvOpStore: - // Can't handle changing the type of a store. There are too many - // other things that might need to change as well. Not worth the - // effort. Punting for now. - - // TODO (s-perron): This can be handled by expanding the store into - // a series of extracts, composite constructs, and a store. - return true; - case SpvOpImageTexelPointer: - case SpvOpName: - return true; - default: - return use->IsDecoration(); + if (new_type_id != use->type_id()) { + return CanUpdateUses(use, new_type_id); } - }); + return true; + } + case SpvOpAccessChain: { + analysis::Pointer* pointer_type = type->AsPointer(); + const analysis::Type* pointee_type = pointer_type->pointee_type(); + + std::vector access_chain; + for (uint32_t i = 1; i < use->NumInOperands(); ++i) { + const analysis::Constant* index_const = + const_mgr->FindDeclaredConstant(use->GetSingleWordInOperand(i)); + if (index_const) { + access_chain.push_back(index_const->AsIntConstant()->GetU32()); + } else { + // Variable index means the type is a type where every element + // is the same type. Use element 0 to get the type. + access_chain.push_back(0); + } + } + + const analysis::Type* new_pointee_type = + type_mgr->GetMemberType(pointee_type, access_chain); + analysis::Pointer pointerTy(new_pointee_type, + pointer_type->storage_class()); + uint32_t new_pointer_type_id = + context()->get_type_mgr()->GetTypeInstruction(&pointerTy); + + if (new_pointer_type_id != use->type_id()) { + return CanUpdateUses(use, new_pointer_type_id); + } + return true; + } + case SpvOpCompositeExtract: { + std::vector access_chain; + for (uint32_t i = 1; i < use->NumInOperands(); ++i) { + access_chain.push_back(use->GetSingleWordInOperand(i)); + } + + const analysis::Type* new_type = + type_mgr->GetMemberType(type, access_chain); + uint32_t new_type_id = type_mgr->GetTypeInstruction(new_type); + + if (new_type_id != use->type_id()) { + return CanUpdateUses(use, new_type_id); + } + return true; + } + case SpvOpStore: + // If needed, we can create an element-by-element copy to change the + // type of the value being stored. This way we can always handled + // stores. + return true; + case SpvOpImageTexelPointer: + case SpvOpName: + return true; + default: + return use->IsDecoration(); + } + }); } void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, Instruction* new_ptr_inst) { @@ -579,7 +581,6 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, for (auto pair : uses) { Instruction* use = pair.first; uint32_t index = pair.second; - analysis::Pointer* pointer_type = nullptr; switch (use->opcode()) { case SpvOpLoad: { // Replace the actual use. @@ -587,8 +588,10 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, use->SetOperand(index, {new_ptr_inst->result_id()}); // Update the type. - pointer_type = type_mgr->GetType(new_ptr_inst->type_id())->AsPointer(); - uint32_t new_type_id = type_mgr->GetId(pointer_type->pointee_type()); + Instruction* pointer_type_inst = + def_use_mgr->GetDef(new_ptr_inst->type_id()); + uint32_t new_type_id = + pointer_type_inst->GetSingleWordInOperand(kTypePointerPointeeInIdx); if (new_type_id != use->type_id()) { use->SetResultType(new_type_id); context()->AnalyzeUses(use); @@ -602,10 +605,6 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, context()->ForgetUses(use); use->SetOperand(index, {new_ptr_inst->result_id()}); - // Update the result type. - pointer_type = type_mgr->GetType(new_ptr_inst->type_id())->AsPointer(); - const analysis::Type* pointee_type = pointer_type->pointee_type(); - // Convert the ids on the OpAccessChain to indices that can be used to // get the specific member. std::vector access_chain; @@ -620,14 +619,20 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, access_chain.push_back(0); } } - const analysis::Type* new_pointee_type = - type_mgr->GetMemberType(pointee_type, access_chain); - // Now build a pointer to the type of the member. - analysis::Pointer new_pointer_type(new_pointee_type, - pointer_type->storage_class()); + Instruction* pointer_type_inst = + get_def_use_mgr()->GetDef(new_ptr_inst->type_id()); + + uint32_t new_pointee_type_id = GetMemberTypeId( + pointer_type_inst->GetSingleWordInOperand(kTypePointerPointeeInIdx), + access_chain); + + SpvStorageClass storage_class = static_cast( + pointer_type_inst->GetSingleWordInOperand( + kTypePointerStorageClassInIdx)); + uint32_t new_pointer_type_id = - context()->get_type_mgr()->GetTypeInstruction(&new_pointer_type); + type_mgr->FindPointerToType(new_pointee_type_id, storage_class); if (new_pointer_type_id != use->type_id()) { use->SetResultType(new_pointer_type_id); @@ -642,15 +647,13 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, context()->ForgetUses(use); use->SetOperand(index, {new_ptr_inst->result_id()}); + uint32_t new_type_id = new_ptr_inst->type_id(); std::vector access_chain; for (uint32_t i = 1; i < use->NumInOperands(); ++i) { access_chain.push_back(use->GetSingleWordInOperand(i)); } - const analysis::Type* type = type_mgr->GetType(new_ptr_inst->type_id()); - const analysis::Type* new_type = - type_mgr->GetMemberType(type, access_chain); - uint32_t new_type_id = type_mgr->GetTypeInstruction(new_type); + new_type_id = GetMemberTypeId(new_type_id, access_chain); if (new_type_id != use->type_id()) { use->SetResultType(new_type_id); @@ -672,11 +675,11 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, if (index == 1) { Instruction* target_pointer = def_use_mgr->GetDef( use->GetSingleWordInOperand(kStorePointerInOperand)); - pointer_type = - type_mgr->GetType(target_pointer->type_id())->AsPointer(); - uint32_t copy = - GenerateCopy(original_ptr_inst, - type_mgr->GetId(pointer_type->pointee_type()), use); + Instruction* pointer_type = + def_use_mgr->GetDef(target_pointer->type_id()); + uint32_t pointee_type_id = + pointer_type->GetSingleWordInOperand(kTypePointerPointeeInIdx); + uint32_t copy = GenerateCopy(original_ptr_inst, pointee_type_id, use); context()->ForgetUses(use); use->SetInOperand(index, {copy}); @@ -768,6 +771,29 @@ uint32_t CopyPropagateArrays::GenerateCopy(Instruction* object_inst, return 0; } +uint32_t CopyPropagateArrays::GetMemberTypeId( + uint32_t id, const std::vector& access_chain) const { + for (uint32_t element_index : access_chain) { + Instruction* type_inst = get_def_use_mgr()->GetDef(id); + switch (type_inst->opcode()) { + case SpvOpTypeArray: + case SpvOpTypeRuntimeArray: + case SpvOpTypeMatrix: + case SpvOpTypeVector: + id = type_inst->GetSingleWordInOperand(0); + break; + case SpvOpTypeStruct: + id = type_inst->GetSingleWordInOperand(element_index); + break; + default: + break; + } + assert(id != 0 && + "Tried to extract from an object where it cannot be done."); + } + return id; +} + void CopyPropagateArrays::MemoryObject::GetMember( const std::vector& access_chain) { access_chain_.insert(access_chain_.end(), access_chain.begin(), diff --git a/3rdparty/spirv-tools/source/opt/copy_prop_arrays.h b/3rdparty/spirv-tools/source/opt/copy_prop_arrays.h index abc07165f..eb7cc68b7 100644 --- a/3rdparty/spirv-tools/source/opt/copy_prop_arrays.h +++ b/3rdparty/spirv-tools/source/opt/copy_prop_arrays.h @@ -47,7 +47,8 @@ class CopyPropagateArrays : public MemPass { return IRContext::kAnalysisDefUse | IRContext::kAnalysisCFG | IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisDecorations | - IRContext::kAnalysisDominatorAnalysis | IRContext::kAnalysisNameMap; + IRContext::kAnalysisDominatorAnalysis | IRContext::kAnalysisNameMap | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: @@ -98,18 +99,21 @@ class CopyPropagateArrays : public MemPass { // Returns the type id of the pointer type that can be used to point to this // memory object. - uint32_t GetPointerTypeId() const { + uint32_t GetPointerTypeId(const CopyPropagateArrays* pass) const { + analysis::DefUseManager* def_use_mgr = + GetVariable()->context()->get_def_use_mgr(); analysis::TypeManager* type_mgr = GetVariable()->context()->get_type_mgr(); - const analysis::Pointer* pointer_type = - type_mgr->GetType(GetVariable()->type_id())->AsPointer(); - const analysis::Type* var_type = pointer_type->pointee_type(); - const analysis::Type* member_type = - type_mgr->GetMemberType(var_type, GetAccessIds()); - uint32_t member_type_id = type_mgr->GetId(member_type); - assert(member_type != 0); + + Instruction* var_pointer_inst = + def_use_mgr->GetDef(GetVariable()->type_id()); + + uint32_t member_type_id = pass->GetMemberTypeId( + var_pointer_inst->GetSingleWordInOperand(1), GetAccessIds()); + uint32_t member_pointer_type_id = type_mgr->FindPointerToType( - member_type_id, pointer_type->storage_class()); + member_type_id, static_cast( + var_pointer_inst->GetSingleWordInOperand(0))); return member_pointer_type_id; } @@ -223,6 +227,12 @@ class CopyPropagateArrays : public MemPass { // the only store that does so. Note it does not look through OpAccessChain // instruction, so partial stores are not considered. Instruction* FindStoreInstruction(const Instruction* var_inst) const; + + // Return the type id of the member of the type |id| access using + // |access_chain|. The elements of |access_chain| are to be interpreted the + // same way the indexes are used in an |OpCompositeExtract| instruction. + uint32_t GetMemberTypeId(uint32_t id, + const std::vector& access_chain) const; }; } // namespace opt diff --git a/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.cpp index b147ef74c..98935361f 100644 --- a/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.cpp @@ -24,6 +24,7 @@ #include "source/cfa.h" #include "source/opt/ir_context.h" #include "source/opt/iterator.h" +#include "source/opt/struct_cfg_analysis.h" #include "source/util/make_unique.h" namespace spvtools { @@ -92,6 +93,8 @@ BasicBlock* DeadBranchElimPass::GetParentBlock(uint32_t id) { bool DeadBranchElimPass::MarkLiveBlocks( Function* func, std::unordered_set* live_blocks) { + StructuredCFGAnalysis* cfgAnalysis = context()->GetStructuredCFGAnalysis(); + std::unordered_set continues; std::vector stack; stack.push_back(&*func->begin()); @@ -160,7 +163,9 @@ bool DeadBranchElimPass::MarkLiveBlocks( Instruction* mergeInst = block->GetMergeInst(); if (mergeInst && mergeInst->opcode() == SpvOpSelectionMerge) { Instruction* first_break = FindFirstExitFromSelectionMerge( - live_lab_id, mergeInst->GetSingleWordInOperand(0)); + live_lab_id, mergeInst->GetSingleWordInOperand(0), + cfgAnalysis->LoopMergeBlock(live_lab_id), + cfgAnalysis->LoopContinueBlock(live_lab_id)); if (first_break == nullptr) { context()->KillInst(mergeInst); } else { @@ -327,7 +332,8 @@ bool DeadBranchElimPass::EraseDeadBlocks( ebi->AddInstruction( MakeUnique(context(), SpvOpUnreachable, 0, 0, std::initializer_list{})); - context()->set_instr_block(&*ebi->tail(), &*ebi); + context()->AnalyzeUses(ebi->terminator()); + context()->set_instr_block(ebi->terminator(), &*ebi); modified = true; } ++ebi; @@ -413,9 +419,9 @@ void DeadBranchElimPass::FixBlockOrder() { // Structured order is more intuitive so use it where possible. if (context()->get_feature_mgr()->HasCapability(SpvCapabilityShader)) { - ProcessReachableCallTree(reorder_structured, context()); + context()->ProcessReachableCallTree(reorder_structured); } else { - ProcessReachableCallTree(reorder_dominators, context()); + context()->ProcessReachableCallTree(reorder_dominators); } } @@ -429,31 +435,100 @@ Pass::Status DeadBranchElimPass::Process() { ProcessFunction pfn = [this](Function* fp) { return EliminateDeadBranches(fp); }; - bool modified = ProcessReachableCallTree(pfn, context()); + bool modified = context()->ProcessReachableCallTree(pfn); if (modified) FixBlockOrder(); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } Instruction* DeadBranchElimPass::FindFirstExitFromSelectionMerge( - uint32_t start_block_id, uint32_t merge_block_id) { + uint32_t start_block_id, uint32_t merge_block_id, uint32_t loop_merge_id, + uint32_t loop_continue_id) { // To find the "first" exit, we follow branches looking for a conditional // branch that is not in a nested construct and is not the header of a new // construct. We follow the control flow from |start_block_id| to find the // first one. - while (start_block_id != merge_block_id) { + while (start_block_id != merge_block_id && start_block_id != loop_merge_id && + start_block_id != loop_continue_id) { BasicBlock* start_block = context()->get_instr_block(start_block_id); Instruction* branch = start_block->terminator(); uint32_t next_block_id = 0; switch (branch->opcode()) { case SpvOpBranchConditional: + next_block_id = start_block->MergeBlockIdIfAny(); + if (next_block_id == 0) { + // If a possible target is the |loop_merge_id| or |loop_continue_id|, + // which are not the current merge node, then we continue the search + // with the other target. + for (uint32_t i = 1; i < 3; i++) { + if (branch->GetSingleWordInOperand(i) == loop_merge_id && + loop_merge_id != merge_block_id) { + next_block_id = branch->GetSingleWordInOperand(3 - i); + break; + } + if (branch->GetSingleWordInOperand(i) == loop_continue_id && + loop_continue_id != merge_block_id) { + next_block_id = branch->GetSingleWordInOperand(3 - i); + break; + } + } + + if (next_block_id == 0) { + return branch; + } + } + break; case SpvOpSwitch: next_block_id = start_block->MergeBlockIdIfAny(); if (next_block_id == 0) { - return branch; + // A switch with no merge instructions can have at most 4 targets: + // a. |merge_block_id| + // b. |loop_merge_id| + // c. |loop_continue_id| + // d. 1 block inside the current region. + // + // This leads to a number of cases of what to do. + // + // 1. Does not jump to a block inside of the current construct. In + // this case, there is not conditional break, so we should return + // |nullptr|. + // + // 2. Jumps to |merge_block_id| and a block inside the current + // construct. In this case, this branch conditionally break to the + // end of the current construct, so return the current branch. + // + // 3. Otherwise, this branch may break, but not to the current merge + // block. So we continue with the block that is inside the loop. + + bool found_break = false; + for (uint32_t i = 1; i < branch->NumInOperands(); i += 2) { + uint32_t target = branch->GetSingleWordInOperand(i); + if (target == merge_block_id) { + found_break = true; + } else if (target != loop_merge_id && target != loop_continue_id) { + next_block_id = branch->GetSingleWordInOperand(i); + } + } + + if (next_block_id == 0) { + // Case 1. + return nullptr; + } + + if (found_break) { + // Case 2. + return branch; + } + + // The fall through is case 3. } break; case SpvOpBranch: - next_block_id = branch->GetSingleWordInOperand(0); + // Need to check if this is the header of a loop nested in the + // selection construct. + next_block_id = start_block->MergeBlockIdIfAny(); + if (next_block_id == 0) { + next_block_id = branch->GetSingleWordInOperand(0); + } break; default: return nullptr; diff --git a/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.h b/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.h index f8b441207..4a1b6b49b 100644 --- a/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.h +++ b/3rdparty/spirv-tools/source/opt/dead_branch_elim_pass.h @@ -44,7 +44,9 @@ class DeadBranchElimPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping; + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: @@ -132,15 +134,20 @@ class DeadBranchElimPass : public MemPass { void FixBlockOrder(); // Return the first branch instruction that is a conditional branch to - // |merge_block_id|. Returns |nullptr| if not such branch exists. If there are + // |merge_block_id|. Returns |nullptr| if no such branch exists. If there are // multiple such branches, the first one is the one that would be executed // first when running the code. That is, the one that dominates all of the // others. // // |start_block_id| must be a block whose innermost containing merge construct // has |merge_block_id| as the merge block. + // + // |loop_merge_id| and |loop_continue_id| are the merge and continue block ids + // of the innermost loop containing |start_block_id|. Instruction* FindFirstExitFromSelectionMerge(uint32_t start_block_id, - uint32_t merge_block_id); + uint32_t merge_block_id, + uint32_t loop_merge_id, + uint32_t loop_continue_id); }; } // namespace opt diff --git a/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.cpp index b42588ff7..7d5634383 100644 --- a/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.cpp @@ -255,7 +255,7 @@ Pass::Status DeadInsertElimPass::Process() { ProcessFunction pfn = [this](Function* fp) { return EliminateDeadInserts(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } diff --git a/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.h b/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.h index 0b111d02c..01f12bb04 100644 --- a/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.h +++ b/3rdparty/spirv-tools/source/opt/dead_insert_elim_pass.h @@ -45,7 +45,8 @@ class DeadInsertElimPass : public MemPass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/dead_variable_elimination.h b/3rdparty/spirv-tools/source/opt/dead_variable_elimination.h index 40a7bc025..5dde71ba7 100644 --- a/3rdparty/spirv-tools/source/opt/dead_variable_elimination.h +++ b/3rdparty/spirv-tools/source/opt/dead_variable_elimination.h @@ -30,7 +30,8 @@ class DeadVariableElimination : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse; + return IRContext::kAnalysisDefUse | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/decoration_manager.cpp b/3rdparty/spirv-tools/source/opt/decoration_manager.cpp index 82aa495c9..a12326ba5 100644 --- a/3rdparty/spirv-tools/source/opt/decoration_manager.cpp +++ b/3rdparty/spirv-tools/source/opt/decoration_manager.cpp @@ -29,7 +29,9 @@ namespace analysis { void DecorationManager::RemoveDecorationsFrom( uint32_t id, std::function pred) { const auto ids_iter = id_to_decoration_insts_.find(id); - if (ids_iter == id_to_decoration_insts_.end()) return; + if (ids_iter == id_to_decoration_insts_.end()) { + return; + } TargetData& decorations_info = ids_iter->second; auto context = module_->context(); @@ -59,8 +61,14 @@ void DecorationManager::RemoveDecorationsFrom( if (!pred(*decoration)) group_decorations_to_keep.push_back(decoration); } - // If all decorations should be kept, move to the next group - if (group_decorations_to_keep.size() == group_decorations.size()) continue; + // If all decorations should be kept, then we can keep |id| part of the + // group. However, if the group itself has no decorations, we should remove + // the id from the group. This is needed to make |KillNameAndDecorate| work + // correctly when a decoration group has no decorations. + if (group_decorations_to_keep.size() == group_decorations.size() && + group_decorations.size() != 0) { + continue; + } // Otherwise, remove |id| from the targets of |group_id| const uint32_t stride = inst->opcode() == SpvOpGroupDecorate ? 1u : 2u; @@ -136,9 +144,6 @@ void DecorationManager::RemoveDecorationsFrom( decorations_info.indirect_decorations.empty() && decorations_info.decorate_insts.empty()) { id_to_decoration_insts_.erase(ids_iter); - - // Remove the OpDecorationGroup defining this group. - if (is_group) context->KillInst(context->get_def_use_mgr()->GetDef(id)); } } @@ -256,6 +261,7 @@ void DecorationManager::AnalyzeDecorations() { AddDecoration(&inst); } } + void DecorationManager::AddDecoration(Instruction* inst) { switch (inst->opcode()) { case SpvOpDecorate: @@ -284,6 +290,43 @@ void DecorationManager::AddDecoration(Instruction* inst) { } } +void DecorationManager::AddDecoration(SpvOp opcode, + std::vector opnds) { + IRContext* ctx = module_->context(); + std::unique_ptr newDecoOp( + new Instruction(ctx, opcode, 0, 0, opnds)); + ctx->AddAnnotationInst(std::move(newDecoOp)); +} + +void DecorationManager::AddDecoration(uint32_t inst_id, uint32_t decoration) { + AddDecoration( + SpvOpDecorate, + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {inst_id}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {decoration}}}); +} + +void DecorationManager::AddDecorationVal(uint32_t inst_id, uint32_t decoration, + uint32_t decoration_value) { + AddDecoration( + SpvOpDecorate, + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {inst_id}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {decoration}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, + {decoration_value}}}); +} + +void DecorationManager::AddMemberDecoration(uint32_t inst_id, uint32_t member, + uint32_t decoration, + uint32_t decoration_value) { + AddDecoration( + SpvOpMemberDecorate, + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {inst_id}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {member}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {decoration}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, + {decoration_value}}}); +} + template std::vector DecorationManager::InternalGetDecorationsFor( uint32_t id, bool include_linkage) { @@ -474,6 +517,11 @@ void DecorationManager::RemoveDecoration(Instruction* inst) { break; } } + +bool operator==(const DecorationManager& lhs, const DecorationManager& rhs) { + return lhs.id_to_decoration_insts_ == rhs.id_to_decoration_insts_; +} + } // namespace analysis } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/decoration_manager.h b/3rdparty/spirv-tools/source/opt/decoration_manager.h index a517ba2d8..a5fb4c861 100644 --- a/3rdparty/spirv-tools/source/opt/decoration_manager.h +++ b/3rdparty/spirv-tools/source/opt/decoration_manager.h @@ -36,11 +36,22 @@ class DecorationManager { } DecorationManager() = delete; - // Removes all decorations from |id| (either directly or indirectly) for - // which |pred| returns true. - // If |id| is a group ID, OpGroupDecorate and OpGroupMemberDecorate will be - // removed if they have no targets left, and OpDecorationGroup will be - // removed if the group is not applied to anyone and contains no decorations. + // Changes all of the decorations (direct and through groups) where |pred| is + // true and that apply to |id| so that they no longer apply to |id|. + // + // If |id| is part of a group, it will be removed from the group if it + // does not use all of the group's decorations, or, if there are no + // decorations that apply to the group. + // + // If decoration groups become empty, the |OpGroupDecorate| and + // |OpGroupMemberDecorate| instructions will be killed. + // + // Decoration instructions that apply directly to |id| will be killed. + // + // If |id| is a decoration group and all of the group's decorations are + // removed, then the |OpGroupDecorate| and + // |OpGroupMemberDecorate| for the group will be killed, but not the defining + // |OpDecorationGroup| instruction. void RemoveDecorationsFrom(uint32_t id, std::function pred = [](const Instruction&) { return true; }); @@ -100,6 +111,26 @@ class DecorationManager { // Informs the decoration manager of a new decoration that it needs to track. void AddDecoration(Instruction* inst); + // Add decoration with |opcode| and operands |opnds|. + void AddDecoration(SpvOp opcode, const std::vector opnds); + + // Add |decoration| of |inst_id| to module. + void AddDecoration(uint32_t inst_id, uint32_t decoration); + + // Add |decoration, decoration_value| of |inst_id| to module. + void AddDecorationVal(uint32_t inst_id, uint32_t decoration, + uint32_t decoration_value); + + // Add |decoration, decoration_value| of |inst_id, member| to module. + void AddMemberDecoration(uint32_t member, uint32_t inst_id, + uint32_t decoration, uint32_t decoration_value); + + friend bool operator==(const DecorationManager&, const DecorationManager&); + friend bool operator!=(const DecorationManager& lhs, + const DecorationManager& rhs) { + return !(lhs == rhs); + } + private: // Analyzes the defs and uses in the given |module| and populates data // structures in this class. Does nothing if |module| is nullptr. @@ -125,6 +156,25 @@ class DecorationManager { // group. }; + friend bool operator==(const TargetData& lhs, const TargetData& rhs) { + if (!std::is_permutation(lhs.direct_decorations.begin(), + lhs.direct_decorations.end(), + rhs.direct_decorations.begin())) { + return false; + } + if (!std::is_permutation(lhs.indirect_decorations.begin(), + lhs.indirect_decorations.end(), + rhs.indirect_decorations.begin())) { + return false; + } + if (!std::is_permutation(lhs.decorate_insts.begin(), + lhs.decorate_insts.end(), + rhs.decorate_insts.begin())) { + return false; + } + return true; + } + // Mapping from ids to the instructions applying a decoration to those ids. // In other words, for each id you get all decoration instructions // referencing that id, be it directly (SpvOpDecorate, SpvOpMemberDecorate diff --git a/3rdparty/spirv-tools/source/opt/def_use_manager.cpp b/3rdparty/spirv-tools/source/opt/def_use_manager.cpp index 4e3649382..0ec98cae1 100644 --- a/3rdparty/spirv-tools/source/opt/def_use_manager.cpp +++ b/3rdparty/spirv-tools/source/opt/def_use_manager.cpp @@ -278,7 +278,17 @@ bool operator==(const DefUseManager& lhs, const DefUseManager& rhs) { return false; } - if (lhs.inst_to_used_ids_ != lhs.inst_to_used_ids_) { + if (lhs.inst_to_used_ids_ != rhs.inst_to_used_ids_) { + for (auto p : lhs.inst_to_used_ids_) { + if (rhs.inst_to_used_ids_.count(p.first) == 0) { + return false; + } + } + for (auto p : rhs.inst_to_used_ids_) { + if (lhs.inst_to_used_ids_.count(p.first) == 0) { + return false; + } + } return false; } return true; diff --git a/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.cpp b/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.cpp index 5be983a58..f067be5f9 100644 --- a/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.cpp @@ -29,7 +29,7 @@ Pass::Status EliminateDeadFunctionsPass::Process() { live_function_set.insert(fp); return false; }; - ProcessReachableCallTree(mark_live, context()); + context()->ProcessReachableCallTree(mark_live); bool modified = false; for (auto funcIter = get_module()->begin(); diff --git a/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.h b/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.h index 165e9a6b5..6ed5c42b0 100644 --- a/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.h +++ b/3rdparty/spirv-tools/source/opt/eliminate_dead_functions_pass.h @@ -30,7 +30,8 @@ class EliminateDeadFunctionsPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse; + return IRContext::kAnalysisDefUse | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/fold.cpp b/3rdparty/spirv-tools/source/opt/fold.cpp index 09d7e5122..d6b583f91 100644 --- a/3rdparty/spirv-tools/source/opt/fold.cpp +++ b/3rdparty/spirv-tools/source/opt/fold.cpp @@ -69,37 +69,68 @@ uint32_t InstructionFolder::BinaryOperate(SpvOp opcode, uint32_t a, case SpvOp::SpvOpIMul: return a * b; case SpvOp::SpvOpUDiv: - assert(b != 0); - return a / b; + if (b != 0) { + return a / b; + } else { + // Dividing by 0 is undefined, so we will just pick 0. + return 0; + } case SpvOp::SpvOpSDiv: - assert(b != 0u); - return (static_cast(a)) / (static_cast(b)); + if (b != 0u) { + return (static_cast(a)) / (static_cast(b)); + } else { + // Dividing by 0 is undefined, so we will just pick 0. + return 0; + } case SpvOp::SpvOpSRem: { // The sign of non-zero result comes from the first operand: a. This is // guaranteed by C++11 rules for integer division operator. The division // result is rounded toward zero, so the result of '%' has the sign of // the first operand. - assert(b != 0u); - return static_cast(a) % static_cast(b); + if (b != 0u) { + return static_cast(a) % static_cast(b); + } else { + // Remainder when dividing with 0 is undefined, so we will just pick 0. + return 0; + } } case SpvOp::SpvOpSMod: { // The sign of non-zero result comes from the second operand: b - assert(b != 0u); - int32_t rem = BinaryOperate(SpvOp::SpvOpSRem, a, b); - int32_t b_prim = static_cast(b); - return (rem + b_prim) % b_prim; + if (b != 0u) { + int32_t rem = BinaryOperate(SpvOp::SpvOpSRem, a, b); + int32_t b_prim = static_cast(b); + return (rem + b_prim) % b_prim; + } else { + // Mod with 0 is undefined, so we will just pick 0. + return 0; + } } case SpvOp::SpvOpUMod: - assert(b != 0u); - return (a % b); + if (b != 0u) { + return (a % b); + } else { + // Mod with 0 is undefined, so we will just pick 0. + return 0; + } // Shifting - case SpvOp::SpvOpShiftRightLogical: { + case SpvOp::SpvOpShiftRightLogical: + if (b > 32) { + // This is undefined behaviour. Choose 0 for consistency. + return 0; + } return a >> b; - } case SpvOp::SpvOpShiftRightArithmetic: + if (b > 32) { + // This is undefined behaviour. Choose 0 for consistency. + return 0; + } return (static_cast(a)) >> b; case SpvOp::SpvOpShiftLeftLogical: + if (b > 32) { + // This is undefined behaviour. Choose 0 for consistency. + return 0; + } return a << b; // Bitwise operations diff --git a/3rdparty/spirv-tools/source/opt/folding_rules.cpp b/3rdparty/spirv-tools/source/opt/folding_rules.cpp index c64cedfb1..327431969 100644 --- a/3rdparty/spirv-tools/source/opt/folding_rules.cpp +++ b/3rdparty/spirv-tools/source/opt/folding_rules.cpp @@ -2025,7 +2025,7 @@ FoldingRule StoringUndef() { // If this is a volatile store, the store cannot be removed. if (inst->NumInOperands() == 3) { - if (inst->GetSingleWordInOperand(3) & SpvMemoryAccessVolatileMask) { + if (inst->GetSingleWordInOperand(2) & SpvMemoryAccessVolatileMask) { return false; } } diff --git a/3rdparty/spirv-tools/source/opt/function.cpp b/3rdparty/spirv-tools/source/opt/function.cpp index c6894c681..9bd46e2a0 100644 --- a/3rdparty/spirv-tools/source/opt/function.cpp +++ b/3rdparty/spirv-tools/source/opt/function.cpp @@ -13,7 +13,10 @@ // limitations under the License. #include "source/opt/function.h" +#include "function.h" +#include "ir_context.h" +#include #include #include @@ -43,28 +46,83 @@ Function* Function::Clone(IRContext* ctx) const { void Function::ForEachInst(const std::function& f, bool run_on_debug_line_insts) { - if (def_inst_) def_inst_->ForEachInst(f, run_on_debug_line_insts); - for (auto& param : params_) param->ForEachInst(f, run_on_debug_line_insts); - for (auto& bb : blocks_) bb->ForEachInst(f, run_on_debug_line_insts); - if (end_inst_) end_inst_->ForEachInst(f, run_on_debug_line_insts); + WhileEachInst( + [&f](Instruction* inst) { + f(inst); + return true; + }, + run_on_debug_line_insts); } void Function::ForEachInst(const std::function& f, bool run_on_debug_line_insts) const { - if (def_inst_) - static_cast(def_inst_.get()) - ->ForEachInst(f, run_on_debug_line_insts); + WhileEachInst( + [&f](const Instruction* inst) { + f(inst); + return true; + }, + run_on_debug_line_insts); +} - for (const auto& param : params_) - static_cast(param.get()) - ->ForEachInst(f, run_on_debug_line_insts); +bool Function::WhileEachInst(const std::function& f, + bool run_on_debug_line_insts) { + if (def_inst_) { + if (!def_inst_->WhileEachInst(f, run_on_debug_line_insts)) { + return false; + } + } - for (const auto& bb : blocks_) - static_cast(bb.get())->ForEachInst( - f, run_on_debug_line_insts); + for (auto& param : params_) { + if (!param->WhileEachInst(f, run_on_debug_line_insts)) { + return false; + } + } + + for (auto& bb : blocks_) { + if (!bb->WhileEachInst(f, run_on_debug_line_insts)) { + return false; + } + } + + if (end_inst_) return end_inst_->WhileEachInst(f, run_on_debug_line_insts); + + return true; +} + +bool Function::WhileEachInst(const std::function& f, + bool run_on_debug_line_insts) const { + if (def_inst_) { + if (!static_cast(def_inst_.get()) + ->WhileEachInst(f, run_on_debug_line_insts)) { + return false; + } + } + + for (const auto& param : params_) { + if (!static_cast(param.get()) + ->WhileEachInst(f, run_on_debug_line_insts)) { + return false; + } + } + + for (const auto& bb : blocks_) { + if (!static_cast(bb.get())->WhileEachInst( + f, run_on_debug_line_insts)) { + return false; + } + } if (end_inst_) - static_cast(end_inst_.get()) + return static_cast(end_inst_.get()) + ->WhileEachInst(f, run_on_debug_line_insts); + + return true; +} + +void Function::ForEachParam(const std::function& f, + bool run_on_debug_line_insts) { + for (auto& param : params_) + static_cast(param.get()) ->ForEachInst(f, run_on_debug_line_insts); } @@ -89,11 +147,28 @@ BasicBlock* Function::InsertBasicBlockAfter( return nullptr; } +bool Function::IsRecursive() const { + IRContext* ctx = blocks_.front()->GetLabel()->context(); + IRContext::ProcessFunction mark_visited = [this](Function* fp) { + return fp == this; + }; + + // Process the call tree from all of the function called by |this|. If it get + // back to |this|, then we have a recursive function. + std::queue roots; + ctx->AddCalls(this, &roots); + return ctx->ProcessCallTreeFromRoots(mark_visited, &roots); +} + std::ostream& operator<<(std::ostream& str, const Function& func) { str << func.PrettyPrint(); return str; } +void Function::Dump() const { + std::cerr << "Function #" << result_id() << "\n" << *this << "\n"; +} + std::string Function::PrettyPrint(uint32_t options) const { std::ostringstream str; ForEachInst([&str, options](const Instruction* inst) { @@ -104,6 +179,5 @@ std::string Function::PrettyPrint(uint32_t options) const { }); return str.str(); } - } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/function.h b/3rdparty/spirv-tools/source/opt/function.h index 4dc5d25a6..c80b078cd 100644 --- a/3rdparty/spirv-tools/source/opt/function.h +++ b/3rdparty/spirv-tools/source/opt/function.h @@ -110,21 +110,34 @@ class Function { bool run_on_debug_line_insts = false); void ForEachInst(const std::function& f, bool run_on_debug_line_insts = false) const; + bool WhileEachInst(const std::function& f, + bool run_on_debug_line_insts = false); + bool WhileEachInst(const std::function& f, + bool run_on_debug_line_insts = false) const; // Runs the given function |f| on each parameter instruction in this function, // and optionally on debug line instructions that might precede them. void ForEachParam(const std::function& f, bool run_on_debug_line_insts = false) const; + void ForEachParam(const std::function& f, + bool run_on_debug_line_insts = false); BasicBlock* InsertBasicBlockAfter(std::unique_ptr&& new_block, BasicBlock* position); + // Return true if the function calls itself either directly or indirectly. + bool IsRecursive() const; + // Pretty-prints all the basic blocks in this function into a std::string. // // |options| are the disassembly options. SPV_BINARY_TO_TEXT_OPTION_NO_HEADER // is always added to |options|. std::string PrettyPrint(uint32_t options = 0u) const; + // Dump this function on stderr. Useful when running interactive + // debuggers. + void Dump() const; + private: // The OpFunction instruction that begins the definition of this function. std::unique_ptr def_inst_; diff --git a/3rdparty/spirv-tools/source/opt/if_conversion.cpp b/3rdparty/spirv-tools/source/opt/if_conversion.cpp index 7a3717f98..104182bc3 100644 --- a/3rdparty/spirv-tools/source/opt/if_conversion.cpp +++ b/3rdparty/spirv-tools/source/opt/if_conversion.cpp @@ -23,6 +23,10 @@ namespace spvtools { namespace opt { Pass::Status IfConversion::Process() { + if (!context()->get_feature_mgr()->HasCapability(SpvCapabilityShader)) { + return Status::SuccessWithoutChange; + } + const ValueNumberTable& vn_table = *context()->GetValueNumberTable(); bool modified = false; std::vector to_kill; @@ -161,6 +165,9 @@ bool IfConversion::CheckBlock(BasicBlock* block, DominatorAnalysis* dominators, if (!*common || cfg()->IsPseudoEntryBlock(*common)) return false; Instruction* branch = (*common)->terminator(); if (branch->opcode() != SpvOpBranchConditional) return false; + auto merge = (*common)->GetMergeInst(); + if (!merge || merge->opcode() != SpvOpSelectionMerge) return false; + if ((*common)->MergeBlockIdIfAny() != block->id()) return false; return true; } diff --git a/3rdparty/spirv-tools/source/opt/if_conversion.h b/3rdparty/spirv-tools/source/opt/if_conversion.h index 609bdf392..db84e703b 100644 --- a/3rdparty/spirv-tools/source/opt/if_conversion.h +++ b/3rdparty/spirv-tools/source/opt/if_conversion.h @@ -32,7 +32,8 @@ class IfConversion : public Pass { IRContext::Analysis GetPreservedAnalyses() override { return IRContext::kAnalysisDefUse | IRContext::kAnalysisDominatorAnalysis | IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisCFG | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp b/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp index 5714cd867..24f4e7364 100644 --- a/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp @@ -21,7 +21,7 @@ namespace spvtools { namespace opt { -bool InlineExhaustivePass::InlineExhaustive(Function* func) { +Pass::Status InlineExhaustivePass::InlineExhaustive(Function* func) { bool modified = false; // Using block iterators here because of block erasures and insertions. for (auto bi = func->begin(); bi != func->end(); ++bi) { @@ -30,7 +30,9 @@ bool InlineExhaustivePass::InlineExhaustive(Function* func) { // Inline call. std::vector> newBlocks; std::vector> newVars; - GenInlineCode(&newBlocks, &newVars, ii, bi); + if (!GenInlineCode(&newBlocks, &newVars, ii, bi)) { + return Status::Failure; + } // If call block is replaced with more than one block, point // succeeding phis at new last block. if (newBlocks.size() > 1) UpdateSucceedingPhis(newBlocks); @@ -58,14 +60,18 @@ bool InlineExhaustivePass::InlineExhaustive(Function* func) { } } } - return modified; + return (modified ? Status::SuccessWithChange : Status::SuccessWithoutChange); } Pass::Status InlineExhaustivePass::ProcessImpl() { + Status status = Status::SuccessWithoutChange; // Attempt exhaustive inlining on each entry point function in module - ProcessFunction pfn = [this](Function* fp) { return InlineExhaustive(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); - return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; + ProcessFunction pfn = [&status, this](Function* fp) { + status = CombineStatus(status, InlineExhaustive(fp)); + return false; + }; + context()->ProcessEntryPointCallTree(pfn); + return status; } InlineExhaustivePass::InlineExhaustivePass() = default; diff --git a/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.h b/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.h index 103e091e0..c2e854731 100644 --- a/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.h +++ b/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.h @@ -40,8 +40,8 @@ class InlineExhaustivePass : public InlinePass { private: // Exhaustively inline all function calls in func as well as in - // all code that is inlined into func. Return true if func is modified. - bool InlineExhaustive(Function* func); + // all code that is inlined into func. Returns the status. + Status InlineExhaustive(Function* func); void Initialize(); Pass::Status ProcessImpl(); diff --git a/3rdparty/spirv-tools/source/opt/inline_opaque_pass.cpp b/3rdparty/spirv-tools/source/opt/inline_opaque_pass.cpp index c2c3719fe..6ccaf9087 100644 --- a/3rdparty/spirv-tools/source/opt/inline_opaque_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/inline_opaque_pass.cpp @@ -63,7 +63,7 @@ bool InlineOpaquePass::HasOpaqueArgsOrReturn(const Instruction* callInst) { }); } -bool InlineOpaquePass::InlineOpaque(Function* func) { +Pass::Status InlineOpaquePass::InlineOpaque(Function* func) { bool modified = false; // Using block iterators here because of block erasures and insertions. for (auto bi = func->begin(); bi != func->end(); ++bi) { @@ -72,7 +72,10 @@ bool InlineOpaquePass::InlineOpaque(Function* func) { // Inline call. std::vector> newBlocks; std::vector> newVars; - GenInlineCode(&newBlocks, &newVars, ii, bi); + if (!GenInlineCode(&newBlocks, &newVars, ii, bi)) { + return Status::Failure; + } + // If call block is replaced with more than one block, point // succeeding phis at new last block. if (newBlocks.size() > 1) UpdateSucceedingPhis(newBlocks); @@ -90,16 +93,20 @@ bool InlineOpaquePass::InlineOpaque(Function* func) { } } } - return modified; + return (modified ? Status::SuccessWithChange : Status::SuccessWithoutChange); } void InlineOpaquePass::Initialize() { InitializeInline(); } Pass::Status InlineOpaquePass::ProcessImpl() { + Status status = Status::SuccessWithoutChange; // Do opaque inlining on each function in entry point call tree - ProcessFunction pfn = [this](Function* fp) { return InlineOpaque(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); - return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; + ProcessFunction pfn = [&status, this](Function* fp) { + status = CombineStatus(status, InlineOpaque(fp)); + return false; + }; + context()->ProcessEntryPointCallTree(pfn); + return status; } InlineOpaquePass::InlineOpaquePass() = default; diff --git a/3rdparty/spirv-tools/source/opt/inline_opaque_pass.h b/3rdparty/spirv-tools/source/opt/inline_opaque_pass.h index aad43fd6a..1e3081d22 100644 --- a/3rdparty/spirv-tools/source/opt/inline_opaque_pass.h +++ b/3rdparty/spirv-tools/source/opt/inline_opaque_pass.h @@ -48,7 +48,7 @@ class InlineOpaquePass : public InlinePass { // Inline all function calls in |func| that have opaque params or return // type. Inline similarly all code that is inlined into func. Return true // if func is modified. - bool InlineOpaque(Function* func); + Status InlineOpaque(Function* func); void Initialize(); Pass::Status ProcessImpl(); diff --git a/3rdparty/spirv-tools/source/opt/inline_pass.cpp b/3rdparty/spirv-tools/source/opt/inline_pass.cpp index 5a88ef5d3..f348bbe3e 100644 --- a/3rdparty/spirv-tools/source/opt/inline_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/inline_pass.cpp @@ -27,7 +27,6 @@ static const int kSpvFunctionCallFunctionId = 2; static const int kSpvFunctionCallArgumentId = 3; static const int kSpvReturnValueId = 0; -static const int kSpvLoopMergeMergeBlockId = 0; static const int kSpvLoopMergeContinueTargetIdInIdx = 1; namespace spvtools { @@ -35,7 +34,11 @@ namespace opt { uint32_t InlinePass::AddPointerToType(uint32_t type_id, SpvStorageClass storage_class) { - uint32_t resultId = TakeNextId(); + uint32_t resultId = context()->TakeNextId(); + if (resultId == 0) { + return resultId; + } + std::unique_ptr type_inst( new Instruction(context(), SpvOpTypePointer, 0, resultId, {{spv_operand_type_t::SPV_OPERAND_TYPE_STORAGE_CLASS, @@ -109,10 +112,16 @@ uint32_t InlinePass::GetFalseId() { if (false_id_ != 0) return false_id_; uint32_t boolId = get_module()->GetGlobalValue(SpvOpTypeBool); if (boolId == 0) { - boolId = TakeNextId(); + boolId = context()->TakeNextId(); + if (boolId == 0) { + return 0; + } get_module()->AddGlobalValue(SpvOpTypeBool, boolId, 0); } - false_id_ = TakeNextId(); + false_id_ = context()->TakeNextId(); + if (false_id_ == 0) { + return 0; + } get_module()->AddGlobalValue(SpvOpConstantFalse, false_id_, boolId); return false_id_; } @@ -121,50 +130,64 @@ void InlinePass::MapParams( Function* calleeFn, BasicBlock::iterator call_inst_itr, std::unordered_map* callee2caller) { int param_idx = 0; - calleeFn->ForEachParam([&call_inst_itr, ¶m_idx, - &callee2caller](const Instruction* cpi) { - const uint32_t pid = cpi->result_id(); - (*callee2caller)[pid] = call_inst_itr->GetSingleWordOperand( - kSpvFunctionCallArgumentId + param_idx); - ++param_idx; - }); + calleeFn->ForEachParam( + [&call_inst_itr, ¶m_idx, &callee2caller](const Instruction* cpi) { + const uint32_t pid = cpi->result_id(); + (*callee2caller)[pid] = call_inst_itr->GetSingleWordOperand( + kSpvFunctionCallArgumentId + param_idx); + ++param_idx; + }); } -void InlinePass::CloneAndMapLocals( +bool InlinePass::CloneAndMapLocals( Function* calleeFn, std::vector>* new_vars, std::unordered_map* callee2caller) { auto callee_block_itr = calleeFn->begin(); auto callee_var_itr = callee_block_itr->begin(); while (callee_var_itr->opcode() == SpvOp::SpvOpVariable) { std::unique_ptr var_inst(callee_var_itr->Clone(context())); - uint32_t newId = TakeNextId(); + uint32_t newId = context()->TakeNextId(); + if (newId == 0) { + return false; + } get_decoration_mgr()->CloneDecorations(callee_var_itr->result_id(), newId); var_inst->SetResultId(newId); (*callee2caller)[callee_var_itr->result_id()] = newId; new_vars->push_back(std::move(var_inst)); ++callee_var_itr; } + return true; } uint32_t InlinePass::CreateReturnVar( Function* calleeFn, std::vector>* new_vars) { uint32_t returnVarId = 0; const uint32_t calleeTypeId = calleeFn->type_id(); - analysis::Type* calleeType = context()->get_type_mgr()->GetType(calleeTypeId); - if (calleeType->AsVoid() == nullptr) { - // Find or create ptr to callee return type. - uint32_t returnVarTypeId = context()->get_type_mgr()->FindPointerToType( - calleeTypeId, SpvStorageClassFunction); - if (returnVarTypeId == 0) - returnVarTypeId = AddPointerToType(calleeTypeId, SpvStorageClassFunction); - // Add return var to new function scope variables. - returnVarId = TakeNextId(); - std::unique_ptr var_inst( - new Instruction(context(), SpvOpVariable, returnVarTypeId, returnVarId, - {{spv_operand_type_t::SPV_OPERAND_TYPE_STORAGE_CLASS, - {SpvStorageClassFunction}}})); - new_vars->push_back(std::move(var_inst)); + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + assert(type_mgr->GetType(calleeTypeId)->AsVoid() == nullptr && + "Cannot create a return variable of type void."); + // Find or create ptr to callee return type. + uint32_t returnVarTypeId = + type_mgr->FindPointerToType(calleeTypeId, SpvStorageClassFunction); + + if (returnVarTypeId == 0) { + returnVarTypeId = AddPointerToType(calleeTypeId, SpvStorageClassFunction); + if (returnVarTypeId == 0) { + return 0; + } } + + // Add return var to new function scope variables. + returnVarId = context()->TakeNextId(); + if (returnVarId == 0) { + return 0; + } + + std::unique_ptr var_inst( + new Instruction(context(), SpvOpVariable, returnVarTypeId, returnVarId, + {{spv_operand_type_t::SPV_OPERAND_TYPE_STORAGE_CLASS, + {SpvStorageClassFunction}}})); + new_vars->push_back(std::move(var_inst)); get_decoration_mgr()->CloneDecorations(calleeFn->result_id(), returnVarId); return returnVarId; } @@ -173,37 +196,44 @@ bool InlinePass::IsSameBlockOp(const Instruction* inst) const { return inst->opcode() == SpvOpSampledImage || inst->opcode() == SpvOpImage; } -void InlinePass::CloneSameBlockOps( +bool InlinePass::CloneSameBlockOps( std::unique_ptr* inst, std::unordered_map* postCallSB, std::unordered_map* preCallSB, std::unique_ptr* block_ptr) { - (*inst)->ForEachInId( - [&postCallSB, &preCallSB, &block_ptr, this](uint32_t* iid) { - const auto mapItr = (*postCallSB).find(*iid); - if (mapItr == (*postCallSB).end()) { - const auto mapItr2 = (*preCallSB).find(*iid); - if (mapItr2 != (*preCallSB).end()) { - // Clone pre-call same-block ops, map result id. - const Instruction* inInst = mapItr2->second; - std::unique_ptr sb_inst(inInst->Clone(context())); - CloneSameBlockOps(&sb_inst, postCallSB, preCallSB, block_ptr); - const uint32_t rid = sb_inst->result_id(); - const uint32_t nid = this->TakeNextId(); - get_decoration_mgr()->CloneDecorations(rid, nid); - sb_inst->SetResultId(nid); - (*postCallSB)[rid] = nid; - *iid = nid; - (*block_ptr)->AddInstruction(std::move(sb_inst)); - } - } else { - // Reset same-block op operand. - *iid = mapItr->second; + return (*inst)->WhileEachInId([&postCallSB, &preCallSB, &block_ptr, + this](uint32_t* iid) { + const auto mapItr = (*postCallSB).find(*iid); + if (mapItr == (*postCallSB).end()) { + const auto mapItr2 = (*preCallSB).find(*iid); + if (mapItr2 != (*preCallSB).end()) { + // Clone pre-call same-block ops, map result id. + const Instruction* inInst = mapItr2->second; + std::unique_ptr sb_inst(inInst->Clone(context())); + if (!CloneSameBlockOps(&sb_inst, postCallSB, preCallSB, block_ptr)) { + return false; } - }); + + const uint32_t rid = sb_inst->result_id(); + const uint32_t nid = context()->TakeNextId(); + if (nid == 0) { + return false; + } + get_decoration_mgr()->CloneDecorations(rid, nid); + sb_inst->SetResultId(nid); + (*postCallSB)[rid] = nid; + *iid = nid; + (*block_ptr)->AddInstruction(std::move(sb_inst)); + } + } else { + // Reset same-block op operand. + *iid = mapItr->second; + } + return true; + }); } -void InlinePass::GenInlineCode( +bool InlinePass::GenInlineCode( std::vector>* new_blocks, std::vector>* new_vars, BasicBlock::iterator call_inst_itr, @@ -225,18 +255,28 @@ void InlinePass::GenInlineCode( kSpvFunctionCallFunctionId)]; // Check for multiple returns in the callee. - auto fi = multi_return_funcs_.find(calleeFn->result_id()); - const bool multiReturn = fi != multi_return_funcs_.end(); + auto fi = early_return_funcs_.find(calleeFn->result_id()); + const bool earlyReturn = fi != early_return_funcs_.end(); // Map parameters to actual arguments. MapParams(calleeFn, call_inst_itr, &callee2caller); // Define caller local variables for all callee variables and create map to // them. - CloneAndMapLocals(calleeFn, new_vars, &callee2caller); + if (!CloneAndMapLocals(calleeFn, new_vars, &callee2caller)) { + return false; + } // Create return var if needed. - uint32_t returnVarId = CreateReturnVar(calleeFn, new_vars); + const uint32_t calleeTypeId = calleeFn->type_id(); + uint32_t returnVarId = 0; + analysis::Type* calleeType = context()->get_type_mgr()->GetType(calleeTypeId); + if (calleeType->AsVoid() == nullptr) { + returnVarId = CreateReturnVar(calleeFn, new_vars); + if (returnVarId == 0) { + return false; + } + } // Create set of callee result ids. Used to detect forward references std::unordered_set callee_result_ids; @@ -270,241 +310,294 @@ void InlinePass::GenInlineCode( uint32_t singleTripLoopContinueId = 0; uint32_t returnLabelId = 0; bool multiBlocks = false; - const uint32_t calleeTypeId = calleeFn->type_id(); // new_blk_ptr is a new basic block in the caller. New instructions are // written to it. It is created when we encounter the OpLabel // of the first callee block. It is appended to new_blocks only when // it is complete. std::unique_ptr new_blk_ptr; - calleeFn->ForEachInst([&new_blocks, &callee2caller, &call_block_itr, - &call_inst_itr, &new_blk_ptr, &prevInstWasReturn, - &returnLabelId, &returnVarId, caller_is_loop_header, - callee_begins_with_structured_header, &calleeTypeId, - &multiBlocks, &postCallSB, &preCallSB, multiReturn, - &singleTripLoopHeaderId, &singleTripLoopContinueId, - &callee_result_ids, this](const Instruction* cpi) { - switch (cpi->opcode()) { - case SpvOpFunction: - case SpvOpFunctionParameter: - // Already processed - break; - case SpvOpVariable: - if (cpi->NumInOperands() == 2) { - assert(callee2caller.count(cpi->result_id()) && - "Expected the variable to have already been mapped."); - uint32_t new_var_id = callee2caller.at(cpi->result_id()); + bool successful = calleeFn->WhileEachInst( + [&new_blocks, &callee2caller, &call_block_itr, &call_inst_itr, + &new_blk_ptr, &prevInstWasReturn, &returnLabelId, &returnVarId, + caller_is_loop_header, callee_begins_with_structured_header, + &calleeTypeId, &multiBlocks, &postCallSB, &preCallSB, earlyReturn, + &singleTripLoopHeaderId, &singleTripLoopContinueId, &callee_result_ids, + this](const Instruction* cpi) { + switch (cpi->opcode()) { + case SpvOpFunction: + case SpvOpFunctionParameter: + // Already processed + break; + case SpvOpVariable: + if (cpi->NumInOperands() == 2) { + assert(callee2caller.count(cpi->result_id()) && + "Expected the variable to have already been mapped."); + uint32_t new_var_id = callee2caller.at(cpi->result_id()); - // The initializer must be a constant or global value. No mapped - // should be used. - uint32_t val_id = cpi->GetSingleWordInOperand(1); - AddStore(new_var_id, val_id, &new_blk_ptr); - } - break; - case SpvOpUnreachable: - case SpvOpKill: { - // Generate a return label so that we split the block with the function - // call. Copy the terminator into the new block. - if (returnLabelId == 0) returnLabelId = this->TakeNextId(); - std::unique_ptr terminator( - new Instruction(context(), cpi->opcode(), 0, 0, {})); - new_blk_ptr->AddInstruction(std::move(terminator)); - break; - } - case SpvOpLabel: { - // If previous instruction was early return, insert branch - // instruction to return block. - if (prevInstWasReturn) { - if (returnLabelId == 0) returnLabelId = this->TakeNextId(); - AddBranch(returnLabelId, &new_blk_ptr); - prevInstWasReturn = false; - } - // Finish current block (if it exists) and get label for next block. - uint32_t labelId; - bool firstBlock = false; - if (new_blk_ptr != nullptr) { - new_blocks->push_back(std::move(new_blk_ptr)); - // If result id is already mapped, use it, otherwise get a new - // one. - const uint32_t rid = cpi->result_id(); - const auto mapItr = callee2caller.find(rid); - labelId = (mapItr != callee2caller.end()) ? mapItr->second - : this->TakeNextId(); - } else { - // First block needs to use label of original block - // but map callee label in case of phi reference. - labelId = call_block_itr->id(); - callee2caller[cpi->result_id()] = labelId; - firstBlock = true; - } - // Create first/next block. - new_blk_ptr = MakeUnique(NewLabel(labelId)); - if (firstBlock) { - // Copy contents of original caller block up to call instruction. - for (auto cii = call_block_itr->begin(); cii != call_inst_itr; - cii = call_block_itr->begin()) { - Instruction* inst = &*cii; - inst->RemoveFromList(); - std::unique_ptr cp_inst(inst); - // Remember same-block ops for possible regeneration. - if (IsSameBlockOp(&*cp_inst)) { - auto* sb_inst_ptr = cp_inst.get(); - preCallSB[cp_inst->result_id()] = sb_inst_ptr; + // The initializer must be a constant or global value. No mapped + // should be used. + uint32_t val_id = cpi->GetSingleWordInOperand(1); + AddStore(new_var_id, val_id, &new_blk_ptr); + } + break; + case SpvOpUnreachable: + case SpvOpKill: { + // Generate a return label so that we split the block with the + // function call. Copy the terminator into the new block. + if (returnLabelId == 0) { + returnLabelId = context()->TakeNextId(); + if (returnLabelId == 0) { + return false; + } + } + std::unique_ptr terminator( + new Instruction(context(), cpi->opcode(), 0, 0, {})); + new_blk_ptr->AddInstruction(std::move(terminator)); + break; + } + case SpvOpLabel: { + // If previous instruction was early return, insert branch + // instruction to return block. + if (prevInstWasReturn) { + if (returnLabelId == 0) { + returnLabelId = context()->TakeNextId(); + if (returnLabelId == 0) { + return false; + } + } + AddBranch(returnLabelId, &new_blk_ptr); + prevInstWasReturn = false; + } + // Finish current block (if it exists) and get label for next block. + uint32_t labelId; + bool firstBlock = false; + if (new_blk_ptr != nullptr) { + new_blocks->push_back(std::move(new_blk_ptr)); + // If result id is already mapped, use it, otherwise get a new + // one. + const uint32_t rid = cpi->result_id(); + const auto mapItr = callee2caller.find(rid); + labelId = (mapItr != callee2caller.end()) + ? mapItr->second + : context()->TakeNextId(); + if (labelId == 0) { + return false; + } + } else { + // First block needs to use label of original block + // but map callee label in case of phi reference. + labelId = call_block_itr->id(); + callee2caller[cpi->result_id()] = labelId; + firstBlock = true; + } + // Create first/next block. + new_blk_ptr = MakeUnique(NewLabel(labelId)); + if (firstBlock) { + // Copy contents of original caller block up to call instruction. + for (auto cii = call_block_itr->begin(); cii != call_inst_itr; + cii = call_block_itr->begin()) { + Instruction* inst = &*cii; + inst->RemoveFromList(); + std::unique_ptr cp_inst(inst); + // Remember same-block ops for possible regeneration. + if (IsSameBlockOp(&*cp_inst)) { + auto* sb_inst_ptr = cp_inst.get(); + preCallSB[cp_inst->result_id()] = sb_inst_ptr; + } + new_blk_ptr->AddInstruction(std::move(cp_inst)); + } + if (caller_is_loop_header && + callee_begins_with_structured_header) { + // We can't place both the caller's merge instruction and + // another merge instruction in the same block. So split the + // calling block. Insert an unconditional branch to a new guard + // block. Later, once we know the ID of the last block, we + // will move the caller's OpLoopMerge from the last generated + // block into the first block. We also wait to avoid + // invalidating various iterators. + const auto guard_block_id = context()->TakeNextId(); + if (guard_block_id == 0) { + return false; + } + AddBranch(guard_block_id, &new_blk_ptr); + new_blocks->push_back(std::move(new_blk_ptr)); + // Start the next block. + new_blk_ptr = MakeUnique(NewLabel(guard_block_id)); + // Reset the mapping of the callee's entry block to point to + // the guard block. Do this so we can fix up phis later on to + // satisfy dominance. + callee2caller[cpi->result_id()] = guard_block_id; + } + // If callee has early return, insert a header block for + // single-trip loop that will encompass callee code. Start + // postheader block. + // + // Note: Consider the following combination: + // - the caller is a single block loop + // - the callee does not begin with a structure header + // - the callee has multiple returns. + // We still need to split the caller block and insert a guard + // block. But we only need to do it once. We haven't done it yet, + // but the single-trip loop header will serve the same purpose. + if (earlyReturn) { + singleTripLoopHeaderId = context()->TakeNextId(); + if (singleTripLoopHeaderId == 0) { + return false; + } + AddBranch(singleTripLoopHeaderId, &new_blk_ptr); + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr = + MakeUnique(NewLabel(singleTripLoopHeaderId)); + returnLabelId = context()->TakeNextId(); + singleTripLoopContinueId = context()->TakeNextId(); + if (returnLabelId == 0 || singleTripLoopContinueId == 0) { + return false; + } + AddLoopMerge(returnLabelId, singleTripLoopContinueId, + &new_blk_ptr); + uint32_t postHeaderId = context()->TakeNextId(); + if (postHeaderId == 0) { + return false; + } + AddBranch(postHeaderId, &new_blk_ptr); + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr = MakeUnique(NewLabel(postHeaderId)); + multiBlocks = true; + // Reset the mapping of the callee's entry block to point to + // the post-header block. Do this so we can fix up phis later + // on to satisfy dominance. + callee2caller[cpi->result_id()] = postHeaderId; + } + } else { + multiBlocks = true; + } + } break; + case SpvOpReturnValue: { + // Store return value to return variable. + assert(returnVarId != 0); + uint32_t valId = cpi->GetInOperand(kSpvReturnValueId).words[0]; + const auto mapItr = callee2caller.find(valId); + if (mapItr != callee2caller.end()) { + valId = mapItr->second; + } + AddStore(returnVarId, valId, &new_blk_ptr); + + // Remember we saw a return; if followed by a label, will need to + // insert branch. + prevInstWasReturn = true; + } break; + case SpvOpReturn: { + // Remember we saw a return; if followed by a label, will need to + // insert branch. + prevInstWasReturn = true; + } break; + case SpvOpFunctionEnd: { + // If there was an early return, we generated a return label id + // for it. Now we have to generate the return block with that Id. + if (returnLabelId != 0) { + // If previous instruction was return, insert branch instruction + // to return block. + if (prevInstWasReturn) AddBranch(returnLabelId, &new_blk_ptr); + if (earlyReturn) { + // If we generated a loop header for the single-trip loop + // to accommodate early returns, insert the continue + // target block now, with a false branch back to the loop + // header. + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr = + MakeUnique(NewLabel(singleTripLoopContinueId)); + uint32_t false_id = GetFalseId(); + if (false_id == 0) { + return false; + } + AddBranchCond(false_id, singleTripLoopHeaderId, returnLabelId, + &new_blk_ptr); + } + // Generate the return block. + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr = MakeUnique(NewLabel(returnLabelId)); + multiBlocks = true; + } + // Load return value into result id of call, if it exists. + if (returnVarId != 0) { + const uint32_t resId = call_inst_itr->result_id(); + assert(resId != 0); + AddLoad(calleeTypeId, resId, returnVarId, &new_blk_ptr); + } + // Copy remaining instructions from caller block. + for (Instruction* inst = call_inst_itr->NextNode(); inst; + inst = call_inst_itr->NextNode()) { + inst->RemoveFromList(); + std::unique_ptr cp_inst(inst); + // If multiple blocks generated, regenerate any same-block + // instruction that has not been seen in this last block. + if (multiBlocks) { + if (!CloneSameBlockOps(&cp_inst, &postCallSB, &preCallSB, + &new_blk_ptr)) { + return false; + } + + // Remember same-block ops in this block. + if (IsSameBlockOp(&*cp_inst)) { + const uint32_t rid = cp_inst->result_id(); + postCallSB[rid] = rid; + } + } + new_blk_ptr->AddInstruction(std::move(cp_inst)); + } + // Finalize inline code. + new_blocks->push_back(std::move(new_blk_ptr)); + } break; + default: { + // Copy callee instruction and remap all input Ids. + std::unique_ptr cp_inst(cpi->Clone(context())); + bool succeeded = cp_inst->WhileEachInId( + [&callee2caller, &callee_result_ids, this](uint32_t* iid) { + const auto mapItr = callee2caller.find(*iid); + if (mapItr != callee2caller.end()) { + *iid = mapItr->second; + } else if (callee_result_ids.find(*iid) != + callee_result_ids.end()) { + // Forward reference. Allocate a new id, map it, + // use it and check for it when remapping result ids + const uint32_t nid = context()->TakeNextId(); + if (nid == 0) { + return false; + } + callee2caller[*iid] = nid; + *iid = nid; + } + return true; + }); + if (!succeeded) { + return false; + } + // If result id is non-zero, remap it. If already mapped, use mapped + // value, else use next id. + const uint32_t rid = cp_inst->result_id(); + if (rid != 0) { + const auto mapItr = callee2caller.find(rid); + uint32_t nid; + if (mapItr != callee2caller.end()) { + nid = mapItr->second; + } else { + nid = context()->TakeNextId(); + if (nid == 0) { + return false; + } + callee2caller[rid] = nid; + } + cp_inst->SetResultId(nid); + get_decoration_mgr()->CloneDecorations(rid, nid); } new_blk_ptr->AddInstruction(std::move(cp_inst)); - } - if (caller_is_loop_header && callee_begins_with_structured_header) { - // We can't place both the caller's merge instruction and another - // merge instruction in the same block. So split the calling block. - // Insert an unconditional branch to a new guard block. Later, - // once we know the ID of the last block, we will move the caller's - // OpLoopMerge from the last generated block into the first block. - // We also wait to avoid invalidating various iterators. - const auto guard_block_id = this->TakeNextId(); - AddBranch(guard_block_id, &new_blk_ptr); - new_blocks->push_back(std::move(new_blk_ptr)); - // Start the next block. - new_blk_ptr = MakeUnique(NewLabel(guard_block_id)); - // Reset the mapping of the callee's entry block to point to - // the guard block. Do this so we can fix up phis later on to - // satisfy dominance. - callee2caller[cpi->result_id()] = guard_block_id; - } - // If callee has multiple returns, insert a header block for - // single-trip loop that will encompass callee code. Start postheader - // block. - // - // Note: Consider the following combination: - // - the caller is a single block loop - // - the callee does not begin with a structure header - // - the callee has multiple returns. - // We still need to split the caller block and insert a guard block. - // But we only need to do it once. We haven't done it yet, but the - // single-trip loop header will serve the same purpose. - if (multiReturn) { - singleTripLoopHeaderId = this->TakeNextId(); - AddBranch(singleTripLoopHeaderId, &new_blk_ptr); - new_blocks->push_back(std::move(new_blk_ptr)); - new_blk_ptr = - MakeUnique(NewLabel(singleTripLoopHeaderId)); - returnLabelId = this->TakeNextId(); - singleTripLoopContinueId = this->TakeNextId(); - AddLoopMerge(returnLabelId, singleTripLoopContinueId, &new_blk_ptr); - uint32_t postHeaderId = this->TakeNextId(); - AddBranch(postHeaderId, &new_blk_ptr); - new_blocks->push_back(std::move(new_blk_ptr)); - new_blk_ptr = MakeUnique(NewLabel(postHeaderId)); - multiBlocks = true; - // Reset the mapping of the callee's entry block to point to - // the post-header block. Do this so we can fix up phis later - // on to satisfy dominance. - callee2caller[cpi->result_id()] = postHeaderId; - } - } else { - multiBlocks = true; + } break; } - } break; - case SpvOpReturnValue: { - // Store return value to return variable. - assert(returnVarId != 0); - uint32_t valId = cpi->GetInOperand(kSpvReturnValueId).words[0]; - const auto mapItr = callee2caller.find(valId); - if (mapItr != callee2caller.end()) { - valId = mapItr->second; - } - AddStore(returnVarId, valId, &new_blk_ptr); + return true; + }); - // Remember we saw a return; if followed by a label, will need to - // insert branch. - prevInstWasReturn = true; - } break; - case SpvOpReturn: { - // Remember we saw a return; if followed by a label, will need to - // insert branch. - prevInstWasReturn = true; - } break; - case SpvOpFunctionEnd: { - // If there was an early return, we generated a return label id - // for it. Now we have to generate the return block with that Id. - if (returnLabelId != 0) { - // If previous instruction was return, insert branch instruction - // to return block. - if (prevInstWasReturn) AddBranch(returnLabelId, &new_blk_ptr); - if (multiReturn) { - // If we generated a loop header to for the single-trip loop - // to accommodate multiple returns, insert the continue - // target block now, with a false branch back to the loop header. - new_blocks->push_back(std::move(new_blk_ptr)); - new_blk_ptr = - MakeUnique(NewLabel(singleTripLoopContinueId)); - AddBranchCond(GetFalseId(), singleTripLoopHeaderId, returnLabelId, - &new_blk_ptr); - } - // Generate the return block. - new_blocks->push_back(std::move(new_blk_ptr)); - new_blk_ptr = MakeUnique(NewLabel(returnLabelId)); - multiBlocks = true; - } - // Load return value into result id of call, if it exists. - if (returnVarId != 0) { - const uint32_t resId = call_inst_itr->result_id(); - assert(resId != 0); - AddLoad(calleeTypeId, resId, returnVarId, &new_blk_ptr); - } - // Copy remaining instructions from caller block. - for (Instruction* inst = call_inst_itr->NextNode(); inst; - inst = call_inst_itr->NextNode()) { - inst->RemoveFromList(); - std::unique_ptr cp_inst(inst); - // If multiple blocks generated, regenerate any same-block - // instruction that has not been seen in this last block. - if (multiBlocks) { - CloneSameBlockOps(&cp_inst, &postCallSB, &preCallSB, &new_blk_ptr); - // Remember same-block ops in this block. - if (IsSameBlockOp(&*cp_inst)) { - const uint32_t rid = cp_inst->result_id(); - postCallSB[rid] = rid; - } - } - new_blk_ptr->AddInstruction(std::move(cp_inst)); - } - // Finalize inline code. - new_blocks->push_back(std::move(new_blk_ptr)); - } break; - default: { - // Copy callee instruction and remap all input Ids. - std::unique_ptr cp_inst(cpi->Clone(context())); - cp_inst->ForEachInId([&callee2caller, &callee_result_ids, - this](uint32_t* iid) { - const auto mapItr = callee2caller.find(*iid); - if (mapItr != callee2caller.end()) { - *iid = mapItr->second; - } else if (callee_result_ids.find(*iid) != callee_result_ids.end()) { - // Forward reference. Allocate a new id, map it, - // use it and check for it when remapping result ids - const uint32_t nid = this->TakeNextId(); - callee2caller[*iid] = nid; - *iid = nid; - } - }); - // If result id is non-zero, remap it. If already mapped, use mapped - // value, else use next id. - const uint32_t rid = cp_inst->result_id(); - if (rid != 0) { - const auto mapItr = callee2caller.find(rid); - uint32_t nid; - if (mapItr != callee2caller.end()) { - nid = mapItr->second; - } else { - nid = this->TakeNextId(); - callee2caller[rid] = nid; - } - cp_inst->SetResultId(nid); - get_decoration_mgr()->CloneDecorations(rid, nid); - } - new_blk_ptr->AddInstruction(std::move(cp_inst)); - } break; - } - }); + if (!successful) { + return false; + } if (caller_is_loop_header && (new_blocks->size() > 1)) { // Move the OpLoopMerge from the last block back to the first, where @@ -533,6 +626,7 @@ void InlinePass::GenInlineCode( for (auto& blk : *new_blocks) { id2block_[blk->id()] = &*blk; } + return true; } bool InlinePass::IsInlinableFunctionCall(const Instruction* inst) { @@ -561,44 +655,24 @@ void InlinePass::UpdateSucceedingPhis( }); } -bool InlinePass::HasMultipleReturns(Function* func) { - bool seenReturn = false; - bool multipleReturns = false; +bool InlinePass::HasNoReturnInStructuredConstruct(Function* func) { + // If control not structured, do not do loop/return analysis + // TODO: Analyze returns in non-structured control flow + if (!context()->get_feature_mgr()->HasCapability(SpvCapabilityShader)) + return false; + const auto structured_analysis = context()->GetStructuredCFGAnalysis(); + // Search for returns in structured construct. + bool return_in_construct = false; for (auto& blk : *func) { auto terminal_ii = blk.cend(); --terminal_ii; - if (terminal_ii->opcode() == SpvOpReturn || - terminal_ii->opcode() == SpvOpReturnValue) { - if (seenReturn) { - multipleReturns = true; - break; - } - seenReturn = true; + if (spvOpcodeIsReturn(terminal_ii->opcode()) && + structured_analysis->ContainingConstruct(blk.id()) != 0) { + return_in_construct = true; + break; } } - return multipleReturns; -} - -void InlinePass::ComputeStructuredSuccessors(Function* func) { - // If header, make merge block first successor. - for (auto& blk : *func) { - uint32_t mbid = blk.MergeBlockIdIfAny(); - if (mbid != 0) { - block2structured_succs_[&blk].push_back(id2block_[mbid]); - } - - // Add true successors. - const auto& const_blk = blk; - const_blk.ForEachSuccessorLabel([&blk, this](const uint32_t sbid) { - block2structured_succs_[&blk].push_back(id2block_[sbid]); - }); - } -} - -InlinePass::GetBlocksFunction InlinePass::StructuredSuccessorsFunction() { - return [this](const BasicBlock* block) { - return &(block2structured_succs_[block]); - }; + return !return_in_construct; } bool InlinePass::HasNoReturnInLoop(Function* func) { @@ -606,52 +680,27 @@ bool InlinePass::HasNoReturnInLoop(Function* func) { // TODO: Analyze returns in non-structured control flow if (!context()->get_feature_mgr()->HasCapability(SpvCapabilityShader)) return false; - // Compute structured block order. This order has the property - // that dominators are before all blocks they dominate and merge blocks - // are after all blocks that are in the control constructs of their header. - ComputeStructuredSuccessors(func); - auto ignore_block = [](cbb_ptr) {}; - auto ignore_edge = [](cbb_ptr, cbb_ptr) {}; - std::list structuredOrder; - CFA::DepthFirstTraversal( - &*func->begin(), StructuredSuccessorsFunction(), ignore_block, - [&](cbb_ptr b) { structuredOrder.push_front(b); }, ignore_edge); - // Search for returns in loops. Only need to track outermost loop + const auto structured_analysis = context()->GetStructuredCFGAnalysis(); + // Search for returns in structured construct. bool return_in_loop = false; - uint32_t outerLoopMergeId = 0; - for (auto& blk : structuredOrder) { - // Exiting current outer loop - if (blk->id() == outerLoopMergeId) outerLoopMergeId = 0; - // Return block - auto terminal_ii = blk->cend(); + for (auto& blk : *func) { + auto terminal_ii = blk.cend(); --terminal_ii; - if (terminal_ii->opcode() == SpvOpReturn || - terminal_ii->opcode() == SpvOpReturnValue) { - if (outerLoopMergeId != 0) { - return_in_loop = true; - break; - } - } else if (terminal_ii != blk->cbegin()) { - auto merge_ii = terminal_ii; - --merge_ii; - // Entering outermost loop - if (merge_ii->opcode() == SpvOpLoopMerge && outerLoopMergeId == 0) - outerLoopMergeId = - merge_ii->GetSingleWordOperand(kSpvLoopMergeMergeBlockId); + if (spvOpcodeIsReturn(terminal_ii->opcode()) && + structured_analysis->ContainingLoop(blk.id()) != 0) { + return_in_loop = true; + break; } } return !return_in_loop; } void InlinePass::AnalyzeReturns(Function* func) { - // Look for multiple returns - if (!HasMultipleReturns(func)) { + if (HasNoReturnInLoop(func)) { no_return_in_loop_.insert(func->result_id()); - return; + if (!HasNoReturnInStructuredConstruct(func)) + early_return_funcs_.insert(func->result_id()); } - multi_return_funcs_.insert(func->result_id()); - // If multiple returns, see if any are in a loop - if (HasNoReturnInLoop(func)) no_return_in_loop_.insert(func->result_id()); } bool InlinePass::IsInlinableFunction(Function* func) { @@ -663,8 +712,15 @@ bool InlinePass::IsInlinableFunction(Function* func) { // done validly if the return was not in a loop in the original function. // Also remember functions with multiple (early) returns. AnalyzeReturns(func); - return no_return_in_loop_.find(func->result_id()) != - no_return_in_loop_.cend(); + if (no_return_in_loop_.find(func->result_id()) == no_return_in_loop_.cend()) { + return false; + } + + if (func->IsRecursive()) { + return false; + } + + return true; } void InlinePass::InitializeInline() { @@ -673,10 +729,9 @@ void InlinePass::InitializeInline() { // clear collections id2function_.clear(); id2block_.clear(); - block2structured_succs_.clear(); inlinable_.clear(); no_return_in_loop_.clear(); - multi_return_funcs_.clear(); + early_return_funcs_.clear(); for (auto& fn : *get_module()) { // Initialize function and block maps. diff --git a/3rdparty/spirv-tools/source/opt/inline_pass.h b/3rdparty/spirv-tools/source/opt/inline_pass.h index 55369c98c..ecfe964f1 100644 --- a/3rdparty/spirv-tools/source/opt/inline_pass.h +++ b/3rdparty/spirv-tools/source/opt/inline_pass.h @@ -36,15 +36,13 @@ class InlinePass : public Pass { using cbb_ptr = const BasicBlock*; public: - using GetBlocksFunction = - std::function*(const BasicBlock*)>; - virtual ~InlinePass() = default; protected: InlinePass(); - // Add pointer to type to module and return resultId. + // Add pointer to type to module and return resultId. Returns 0 if the type + // could not be created. uint32_t AddPointerToType(uint32_t type_id, SpvStorageClass storage_class); // Add unconditional branch to labelId to end of block block_ptr. @@ -70,20 +68,22 @@ class InlinePass : public Pass { std::unique_ptr NewLabel(uint32_t label_id); // Returns the id for the boolean false value. Looks in the module first - // and creates it if not found. Remembers it for future calls. + // and creates it if not found. Remembers it for future calls. Returns 0 if + // the value could not be created. uint32_t GetFalseId(); // Map callee params to caller args void MapParams(Function* calleeFn, BasicBlock::iterator call_inst_itr, std::unordered_map* callee2caller); - // Clone and map callee locals - void CloneAndMapLocals(Function* calleeFn, + // Clone and map callee locals. Return true if successful. + bool CloneAndMapLocals(Function* calleeFn, std::vector>* new_vars, std::unordered_map* callee2caller); - // Create return variable for callee clone code if needed. Return id - // if created, otherwise 0. + // Create return variable for callee clone code. The return type of + // |calleeFn| must not be void. Returns the id of the return variable if + // created. Returns 0 if the return variable could not be created. uint32_t CreateReturnVar(Function* calleeFn, std::vector>* new_vars); @@ -95,7 +95,7 @@ class InlinePass : public Pass { // Look in preCallSB for instructions that need cloning. Look in // postCallSB for instructions already cloned. Add cloned instruction // to postCallSB. - void CloneSameBlockOps(std::unique_ptr* inst, + bool CloneSameBlockOps(std::unique_ptr* inst, std::unordered_map* postCallSB, std::unordered_map* preCallSB, std::unique_ptr* block_ptr); @@ -114,7 +114,9 @@ class InlinePass : public Pass { // Also return in new_vars additional OpVariable instructions required by // and to be inserted into the caller function after the block at // call_block_itr is replaced with new_blocks. - void GenInlineCode(std::vector>* new_blocks, + // + // Returns true if successful. + bool GenInlineCode(std::vector>* new_blocks, std::vector>* new_vars, BasicBlock::iterator call_inst_itr, UptrVectorIterator call_block_itr); @@ -122,21 +124,9 @@ class InlinePass : public Pass { // Return true if |inst| is a function call that can be inlined. bool IsInlinableFunctionCall(const Instruction* inst); - // Compute structured successors for function |func|. - // A block's structured successors are the blocks it branches to - // together with its declared merge block if it has one. - // When order matters, the merge block always appears first. - // This assures correct depth first search in the presence of early - // returns and kills. If the successor vector contain duplicates - // if the merge block, they are safely ignored by DFS. - void ComputeStructuredSuccessors(Function* func); - - // Return function to return ordered structure successors for a given block - // Assumes ComputeStructuredSuccessors() has been called. - GetBlocksFunction StructuredSuccessorsFunction(); - - // Return true if |func| has multiple returns - bool HasMultipleReturns(Function* func); + // Return true if |func| does not have a return that is + // nested in a structured if, switch or loop. + bool HasNoReturnInStructuredConstruct(Function* func); // Return true if |func| has no return in a loop. The current analysis // requires structured control flow, so return false if control flow not @@ -163,8 +153,8 @@ class InlinePass : public Pass { // CFG. It has functionality not present in CFG. Consolidate. std::unordered_map id2block_; - // Set of ids of functions with multiple returns. - std::set multi_return_funcs_; + // Set of ids of functions with early return. + std::set early_return_funcs_; // Set of ids of functions with no returns in loop std::set no_return_in_loop_; @@ -174,13 +164,6 @@ class InlinePass : public Pass { // result id for OpConstantFalse uint32_t false_id_; - - // Map from block to its structured successor blocks. See - // ComputeStructuredSuccessors() for definition. TODO(dnovillo): This is - // superfluous wrt CFG, but it seems to be computed in a slightly - // different way in the inliner. Can these be consolidated? - std::unordered_map> - block2structured_succs_; }; } // namespace opt diff --git a/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.cpp b/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.cpp new file mode 100644 index 000000000..1901f763b --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.cpp @@ -0,0 +1,263 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "inst_bindless_check_pass.h" + +namespace { + +// Input Operand Indices +static const int kSpvImageSampleImageIdInIdx = 0; +static const int kSpvSampledImageImageIdInIdx = 0; +static const int kSpvSampledImageSamplerIdInIdx = 1; +static const int kSpvImageSampledImageIdInIdx = 0; +static const int kSpvLoadPtrIdInIdx = 0; +static const int kSpvAccessChainBaseIdInIdx = 0; +static const int kSpvAccessChainIndex0IdInIdx = 1; +static const int kSpvTypePointerTypeIdInIdx = 1; +static const int kSpvTypeArrayLengthIdInIdx = 1; +static const int kSpvConstantValueInIdx = 0; + +} // anonymous namespace + +namespace spvtools { +namespace opt { + +void InstBindlessCheckPass::GenBindlessCheckCode( + BasicBlock::iterator ref_inst_itr, + UptrVectorIterator ref_block_itr, uint32_t instruction_idx, + uint32_t stage_idx, std::vector>* new_blocks) { + // Look for reference through bindless descriptor. If not, return. + std::unique_ptr new_blk_ptr; + uint32_t image_id; + switch (ref_inst_itr->opcode()) { + case SpvOp::SpvOpImageSampleImplicitLod: + case SpvOp::SpvOpImageSampleExplicitLod: + case SpvOp::SpvOpImageSampleDrefImplicitLod: + case SpvOp::SpvOpImageSampleDrefExplicitLod: + case SpvOp::SpvOpImageSampleProjImplicitLod: + case SpvOp::SpvOpImageSampleProjExplicitLod: + case SpvOp::SpvOpImageSampleProjDrefImplicitLod: + case SpvOp::SpvOpImageSampleProjDrefExplicitLod: + case SpvOp::SpvOpImageGather: + case SpvOp::SpvOpImageDrefGather: + case SpvOp::SpvOpImageQueryLod: + case SpvOp::SpvOpImageSparseSampleImplicitLod: + case SpvOp::SpvOpImageSparseSampleExplicitLod: + case SpvOp::SpvOpImageSparseSampleDrefImplicitLod: + case SpvOp::SpvOpImageSparseSampleDrefExplicitLod: + case SpvOp::SpvOpImageSparseSampleProjImplicitLod: + case SpvOp::SpvOpImageSparseSampleProjExplicitLod: + case SpvOp::SpvOpImageSparseSampleProjDrefImplicitLod: + case SpvOp::SpvOpImageSparseSampleProjDrefExplicitLod: + case SpvOp::SpvOpImageSparseGather: + case SpvOp::SpvOpImageSparseDrefGather: + case SpvOp::SpvOpImageFetch: + case SpvOp::SpvOpImageRead: + case SpvOp::SpvOpImageQueryFormat: + case SpvOp::SpvOpImageQueryOrder: + case SpvOp::SpvOpImageQuerySizeLod: + case SpvOp::SpvOpImageQuerySize: + case SpvOp::SpvOpImageQueryLevels: + case SpvOp::SpvOpImageQuerySamples: + case SpvOp::SpvOpImageSparseFetch: + case SpvOp::SpvOpImageSparseRead: + case SpvOp::SpvOpImageWrite: + image_id = + ref_inst_itr->GetSingleWordInOperand(kSpvImageSampleImageIdInIdx); + break; + default: + return; + } + Instruction* image_inst = get_def_use_mgr()->GetDef(image_id); + uint32_t load_id; + Instruction* load_inst; + if (image_inst->opcode() == SpvOp::SpvOpSampledImage) { + load_id = image_inst->GetSingleWordInOperand(kSpvSampledImageImageIdInIdx); + load_inst = get_def_use_mgr()->GetDef(load_id); + } else if (image_inst->opcode() == SpvOp::SpvOpImage) { + load_id = image_inst->GetSingleWordInOperand(kSpvImageSampledImageIdInIdx); + load_inst = get_def_use_mgr()->GetDef(load_id); + } else { + load_id = image_id; + load_inst = image_inst; + image_id = 0; + } + if (load_inst->opcode() != SpvOp::SpvOpLoad) { + // TODO(greg-lunarg): Handle additional possibilities + return; + } + uint32_t ptr_id = load_inst->GetSingleWordInOperand(kSpvLoadPtrIdInIdx); + Instruction* ptr_inst = get_def_use_mgr()->GetDef(ptr_id); + if (ptr_inst->opcode() != SpvOp::SpvOpAccessChain) return; + if (ptr_inst->NumInOperands() != 2) { + assert(false && "unexpected bindless index number"); + return; + } + uint32_t index_id = + ptr_inst->GetSingleWordInOperand(kSpvAccessChainIndex0IdInIdx); + ptr_id = ptr_inst->GetSingleWordInOperand(kSpvAccessChainBaseIdInIdx); + ptr_inst = get_def_use_mgr()->GetDef(ptr_id); + if (ptr_inst->opcode() != SpvOpVariable) { + assert(false && "unexpected bindless base"); + return; + } + uint32_t var_type_id = ptr_inst->type_id(); + Instruction* var_type_inst = get_def_use_mgr()->GetDef(var_type_id); + uint32_t ptr_type_id = + var_type_inst->GetSingleWordInOperand(kSpvTypePointerTypeIdInIdx); + Instruction* ptr_type_inst = get_def_use_mgr()->GetDef(ptr_type_id); + // TODO(greg-lunarg): Handle RuntimeArray. Will need to pull length + // out of debug input buffer. + if (ptr_type_inst->opcode() != SpvOpTypeArray) return; + // If index and bound both compile-time constants and index < bound, + // return without changing + uint32_t length_id = + ptr_type_inst->GetSingleWordInOperand(kSpvTypeArrayLengthIdInIdx); + Instruction* index_inst = get_def_use_mgr()->GetDef(index_id); + Instruction* length_inst = get_def_use_mgr()->GetDef(length_id); + if (index_inst->opcode() == SpvOpConstant && + length_inst->opcode() == SpvOpConstant && + index_inst->GetSingleWordInOperand(kSpvConstantValueInIdx) < + length_inst->GetSingleWordInOperand(kSpvConstantValueInIdx)) + return; + // Generate full runtime bounds test code with true branch + // being full reference and false branch being debug output and zero + // for the referenced value. + MovePreludeCode(ref_inst_itr, ref_block_itr, &new_blk_ptr); + InstructionBuilder builder( + context(), &*new_blk_ptr, + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); + uint32_t error_id = builder.GetUintConstantId(kInstErrorBindlessBounds); + Instruction* ult_inst = + builder.AddBinaryOp(GetBoolId(), SpvOpULessThan, index_id, length_id); + uint32_t merge_blk_id = TakeNextId(); + uint32_t valid_blk_id = TakeNextId(); + uint32_t invalid_blk_id = TakeNextId(); + std::unique_ptr merge_label(NewLabel(merge_blk_id)); + std::unique_ptr valid_label(NewLabel(valid_blk_id)); + std::unique_ptr invalid_label(NewLabel(invalid_blk_id)); + (void)builder.AddConditionalBranch(ult_inst->result_id(), valid_blk_id, + invalid_blk_id, merge_blk_id, + SpvSelectionControlMaskNone); + // Close selection block and gen valid reference block + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr.reset(new BasicBlock(std::move(valid_label))); + builder.SetInsertPoint(&*new_blk_ptr); + // Clone descriptor load + Instruction* new_load_inst = + builder.AddLoad(load_inst->type_id(), + load_inst->GetSingleWordInOperand(kSpvLoadPtrIdInIdx)); + uint32_t new_load_id = new_load_inst->result_id(); + get_decoration_mgr()->CloneDecorations(load_inst->result_id(), new_load_id); + uint32_t new_image_id = new_load_id; + // Clone Image/SampledImage with new load, if needed + if (image_id != 0) { + if (image_inst->opcode() == SpvOp::SpvOpSampledImage) { + Instruction* new_image_inst = builder.AddBinaryOp( + image_inst->type_id(), SpvOpSampledImage, new_load_id, + image_inst->GetSingleWordInOperand(kSpvSampledImageSamplerIdInIdx)); + new_image_id = new_image_inst->result_id(); + } else { + assert(image_inst->opcode() == SpvOp::SpvOpImage && "expecting OpImage"); + Instruction* new_image_inst = + builder.AddUnaryOp(image_inst->type_id(), SpvOpImage, new_load_id); + new_image_id = new_image_inst->result_id(); + } + get_decoration_mgr()->CloneDecorations(image_id, new_image_id); + } + // Clone original reference using new image code + std::unique_ptr new_ref_inst(ref_inst_itr->Clone(context())); + uint32_t ref_result_id = ref_inst_itr->result_id(); + uint32_t new_ref_id = 0; + if (ref_result_id != 0) { + new_ref_id = TakeNextId(); + new_ref_inst->SetResultId(new_ref_id); + } + new_ref_inst->SetInOperand(kSpvImageSampleImageIdInIdx, {new_image_id}); + // Register new reference and add to new block + builder.AddInstruction(std::move(new_ref_inst)); + if (new_ref_id != 0) + get_decoration_mgr()->CloneDecorations(ref_result_id, new_ref_id); + // Close valid block and gen invalid block + (void)builder.AddBranch(merge_blk_id); + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr.reset(new BasicBlock(std::move(invalid_label))); + builder.SetInsertPoint(&*new_blk_ptr); + uint32_t u_index_id = GenUintCastCode(index_id, &builder); + GenDebugStreamWrite(instruction_idx, stage_idx, + {error_id, u_index_id, length_id}, &builder); + // Remember last invalid block id + uint32_t last_invalid_blk_id = new_blk_ptr->GetLabelInst()->result_id(); + // Gen zero for invalid reference + uint32_t ref_type_id = ref_inst_itr->type_id(); + // Close invalid block and gen merge block + (void)builder.AddBranch(merge_blk_id); + new_blocks->push_back(std::move(new_blk_ptr)); + new_blk_ptr.reset(new BasicBlock(std::move(merge_label))); + builder.SetInsertPoint(&*new_blk_ptr); + // Gen phi of new reference and zero, if necessary, and replace the + // result id of the original reference with that of the Phi. Kill original + // reference and move in remainder of original block. + if (new_ref_id != 0) { + Instruction* phi_inst = builder.AddPhi( + ref_type_id, {new_ref_id, valid_blk_id, builder.GetNullId(ref_type_id), + last_invalid_blk_id}); + context()->ReplaceAllUsesWith(ref_result_id, phi_inst->result_id()); + } + context()->KillInst(&*ref_inst_itr); + MovePostludeCode(ref_block_itr, &new_blk_ptr); + // Add remainder/merge block to new blocks + new_blocks->push_back(std::move(new_blk_ptr)); +} + +void InstBindlessCheckPass::InitializeInstBindlessCheck() { + // Initialize base class + InitializeInstrument(); + // Look for related extensions + ext_descriptor_indexing_defined_ = false; + for (auto& ei : get_module()->extensions()) { + const char* ext_name = + reinterpret_cast(&ei.GetInOperand(0).words[0]); + if (strcmp(ext_name, "SPV_EXT_descriptor_indexing") == 0) { + ext_descriptor_indexing_defined_ = true; + break; + } + } +} + +Pass::Status InstBindlessCheckPass::ProcessImpl() { + // Perform instrumentation on each entry point function in module + InstProcessFunction pfn = + [this](BasicBlock::iterator ref_inst_itr, + UptrVectorIterator ref_block_itr, + uint32_t instruction_idx, uint32_t stage_idx, + std::vector>* new_blocks) { + return GenBindlessCheckCode(ref_inst_itr, ref_block_itr, + instruction_idx, stage_idx, new_blocks); + }; + bool modified = InstProcessEntryPointCallTree(pfn); + // This pass does not update inst->blk info + context()->InvalidateAnalyses(IRContext::kAnalysisInstrToBlockMapping); + return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; +} + +Pass::Status InstBindlessCheckPass::Process() { + InitializeInstBindlessCheck(); + return ProcessImpl(); +} + +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.h b/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.h new file mode 100644 index 000000000..3ab5ab7cf --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/inst_bindless_check_pass.h @@ -0,0 +1,93 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIBSPIRV_OPT_INST_BINDLESS_CHECK_PASS_H_ +#define LIBSPIRV_OPT_INST_BINDLESS_CHECK_PASS_H_ + +#include "instrument_pass.h" + +namespace spvtools { +namespace opt { + +// This class/pass is designed to support the bindless (descriptor indexing) +// GPU-assisted validation layer of +// https://github.com/KhronosGroup/Vulkan-ValidationLayers. Its internal and +// external design may change as the layer evolves. +class InstBindlessCheckPass : public InstrumentPass { + public: + // For test harness only + InstBindlessCheckPass() : InstrumentPass(7, 23, kInstValidationIdBindless) {} + // For all other interfaces + InstBindlessCheckPass(uint32_t desc_set, uint32_t shader_id) + : InstrumentPass(desc_set, shader_id, kInstValidationIdBindless) {} + + ~InstBindlessCheckPass() override = default; + + // See optimizer.hpp for pass user documentation. + Status Process() override; + + const char* name() const override { return "inst-bindless-check-pass"; } + + private: + // Initialize state for instrumenting bindless checking + void InitializeInstBindlessCheck(); + + // This function does bindless checking instrumentation on a single + // instruction. It is designed to be passed to + // InstrumentPass::InstProcessEntryPointCallTree(), which applies the + // function to each instruction in a module and replaces the instruction + // if warranted. + // + // If |ref_inst_itr| is a bindless reference, return in |new_blocks| the + // result of instrumenting it with validation code within its block at + // |ref_block_itr|. Specifically, generate code to check that the index + // into the descriptor array is in-bounds. If the check passes, execute + // the remainder of the reference, otherwise write a record to the debug + // output buffer stream including |function_idx, instruction_idx, stage_idx| + // and replace the reference with the null value of the original type. The + // block at |ref_block_itr| can just be replaced with the blocks in + // |new_blocks|, which will contain at least two blocks. The last block will + // comprise all instructions following |ref_inst_itr|, + // preceded by a phi instruction. + // + // This instrumentation pass utilizes GenDebugStreamWrite() to write its + // error records. The validation-specific part of the error record will + // have the format: + // + // Validation Error Code (=kInstErrorBindlessBounds) + // Descriptor Index + // Descriptor Array Size + // + // The Descriptor Index is the index which has been determined to be + // out-of-bounds. + // + // The Descriptor Array Size is the size of the descriptor array which was + // indexed. + void GenBindlessCheckCode( + BasicBlock::iterator ref_inst_itr, + UptrVectorIterator ref_block_itr, uint32_t instruction_idx, + uint32_t stage_idx, std::vector>* new_blocks); + + Pass::Status ProcessImpl(); + + // True if VK_EXT_descriptor_indexing is defined + bool ext_descriptor_indexing_defined_; +}; + +} // namespace opt +} // namespace spvtools + +#endif // LIBSPIRV_OPT_INST_BINDLESS_CHECK_PASS_H_ diff --git a/3rdparty/spirv-tools/source/opt/instruction.cpp b/3rdparty/spirv-tools/source/opt/instruction.cpp index 4cfa41d8e..5f3c5a889 100644 --- a/3rdparty/spirv-tools/source/opt/instruction.cpp +++ b/3rdparty/spirv-tools/source/opt/instruction.cpp @@ -156,6 +156,7 @@ bool Instruction::IsReadOnlyLoad() const { Instruction* Instruction::GetBaseAddress() const { assert((IsLoad() || opcode() == SpvOpStore || opcode() == SpvOpAccessChain || + opcode() == SpvOpPtrAccessChain || opcode() == SpvOpInBoundsAccessChain || opcode() == SpvOpCopyObject || opcode() == SpvOpImageTexelPointer) && "GetBaseAddress should only be called on instructions that take a " @@ -187,6 +188,8 @@ Instruction* Instruction::GetBaseAddress() const { case SpvOpStore: case SpvOpAccessChain: case SpvOpInBoundsAccessChain: + case SpvOpPtrAccessChain: + case SpvOpImageTexelPointer: case SpvOpCopyObject: // A load or store through a pointer. assert(base_inst->IsValidBasePointer() && @@ -510,7 +513,7 @@ bool Instruction::IsFloatingPointFoldingAllowed() const { bool is_nocontract = false; context_->get_decoration_mgr()->WhileEachDecoration( - opcode_, SpvDecorationNoContraction, + result_id(), SpvDecorationNoContraction, [&is_nocontract](const Instruction&) { is_nocontract = true; return false; @@ -540,6 +543,10 @@ std::ostream& operator<<(std::ostream& str, const Instruction& inst) { return str; } +void Instruction::Dump() const { + std::cerr << "Instruction #" << unique_id() << "\n" << *this << "\n"; +} + bool Instruction::IsOpcodeCodeMotionSafe() const { switch (opcode_) { case SpvOpNop: diff --git a/3rdparty/spirv-tools/source/opt/instruction.h b/3rdparty/spirv-tools/source/opt/instruction.h index 2533ba272..034da76f4 100644 --- a/3rdparty/spirv-tools/source/opt/instruction.h +++ b/3rdparty/spirv-tools/source/opt/instruction.h @@ -349,6 +349,10 @@ class Instruction : public utils::IntrusiveNodeBase { // uniform buffer. bool IsVulkanUniformBuffer() const; + // Returns true if the instruction is an atom operation that uses original + // value. + inline bool IsAtomicWithLoad() const; + // Returns true if the instruction is an atom operation. inline bool IsAtomicOp() const; @@ -427,6 +431,10 @@ class Instruction : public utils::IntrusiveNodeBase { // rules for physical addressing. bool IsValidBasePointer() const; + // Dump this instruction on stderr. Useful when running interactive + // debuggers. + void Dump() const; + private: // Returns the total count of result type id and result id. uint32_t TypeResultIdCount() const { @@ -610,15 +618,8 @@ inline void Instruction::ForEachId( inline bool Instruction::WhileEachInId( const std::function& f) { for (auto& opnd : operands_) { - switch (opnd.type) { - case SPV_OPERAND_TYPE_RESULT_ID: - case SPV_OPERAND_TYPE_TYPE_ID: - break; - default: - if (spvIsIdType(opnd.type)) { - if (!f(&opnd.words[0])) return false; - } - break; + if (spvIsInIdType(opnd.type)) { + if (!f(&opnd.words[0])) return false; } } return true; @@ -627,15 +628,8 @@ inline bool Instruction::WhileEachInId( inline bool Instruction::WhileEachInId( const std::function& f) const { for (const auto& opnd : operands_) { - switch (opnd.type) { - case SPV_OPERAND_TYPE_RESULT_ID: - case SPV_OPERAND_TYPE_TYPE_ID: - break; - default: - if (spvIsIdType(opnd.type)) { - if (!f(&opnd.words[0])) return false; - } - break; + if (spvIsInIdType(opnd.type)) { + if (!f(&opnd.words[0])) return false; } } return true; @@ -724,6 +718,10 @@ bool Instruction::IsDecoration() const { bool Instruction::IsLoad() const { return spvOpcodeIsLoad(opcode()); } +bool Instruction::IsAtomicWithLoad() const { + return spvOpcodeIsAtomicWithLoad(opcode()); +} + bool Instruction::IsAtomicOp() const { return spvOpcodeIsAtomicOp(opcode()); } bool Instruction::IsConstant() const { diff --git a/3rdparty/spirv-tools/source/opt/instrument_pass.cpp b/3rdparty/spirv-tools/source/opt/instrument_pass.cpp new file mode 100644 index 000000000..7f56a1e0d --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/instrument_pass.cpp @@ -0,0 +1,710 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "instrument_pass.h" + +#include "source/cfa.h" + +namespace { + +// Common Parameter Positions +static const int kInstCommonParamInstIdx = 0; +static const int kInstCommonParamCnt = 1; + +// Indices of operands in SPIR-V instructions +static const int kEntryPointExecutionModelInIdx = 0; +static const int kEntryPointFunctionIdInIdx = 1; + +} // anonymous namespace + +namespace spvtools { +namespace opt { + +void InstrumentPass::MovePreludeCode( + BasicBlock::iterator ref_inst_itr, + UptrVectorIterator ref_block_itr, + std::unique_ptr* new_blk_ptr) { + same_block_pre_.clear(); + same_block_post_.clear(); + // Initialize new block. Reuse label from original block. + new_blk_ptr->reset(new BasicBlock(std::move(ref_block_itr->GetLabel()))); + // Move contents of original ref block up to ref instruction. + for (auto cii = ref_block_itr->begin(); cii != ref_inst_itr; + cii = ref_block_itr->begin()) { + Instruction* inst = &*cii; + inst->RemoveFromList(); + std::unique_ptr mv_ptr(inst); + // Remember same-block ops for possible regeneration. + if (IsSameBlockOp(&*mv_ptr)) { + auto* sb_inst_ptr = mv_ptr.get(); + same_block_pre_[mv_ptr->result_id()] = sb_inst_ptr; + } + (*new_blk_ptr)->AddInstruction(std::move(mv_ptr)); + } +} + +void InstrumentPass::MovePostludeCode( + UptrVectorIterator ref_block_itr, + std::unique_ptr* new_blk_ptr) { + // new_blk_ptr->reset(new BasicBlock(NewLabel(ref_block_itr->id()))); + // Move contents of original ref block. + for (auto cii = ref_block_itr->begin(); cii != ref_block_itr->end(); + cii = ref_block_itr->begin()) { + Instruction* inst = &*cii; + inst->RemoveFromList(); + std::unique_ptr mv_inst(inst); + // Regenerate any same-block instruction that has not been seen in the + // current block. + if (same_block_pre_.size() > 0) { + CloneSameBlockOps(&mv_inst, &same_block_post_, &same_block_pre_, + new_blk_ptr); + // Remember same-block ops in this block. + if (IsSameBlockOp(&*mv_inst)) { + const uint32_t rid = mv_inst->result_id(); + same_block_post_[rid] = rid; + } + } + (*new_blk_ptr)->AddInstruction(std::move(mv_inst)); + } +} + +std::unique_ptr InstrumentPass::NewLabel(uint32_t label_id) { + std::unique_ptr newLabel( + new Instruction(context(), SpvOpLabel, 0, label_id, {})); + get_def_use_mgr()->AnalyzeInstDefUse(&*newLabel); + return newLabel; +} + +uint32_t InstrumentPass::GenUintCastCode(uint32_t val_id, + InstructionBuilder* builder) { + // Cast value to 32-bit unsigned if necessary + if (get_def_use_mgr()->GetDef(val_id)->type_id() == GetUintId()) + return val_id; + return builder->AddUnaryOp(GetUintId(), SpvOpBitcast, val_id)->result_id(); +} + +void InstrumentPass::GenDebugOutputFieldCode(uint32_t base_offset_id, + uint32_t field_offset, + uint32_t field_value_id, + InstructionBuilder* builder) { + // Cast value to 32-bit unsigned if necessary + uint32_t val_id = GenUintCastCode(field_value_id, builder); + // Store value + Instruction* data_idx_inst = + builder->AddBinaryOp(GetUintId(), SpvOpIAdd, base_offset_id, + builder->GetUintConstantId(field_offset)); + uint32_t buf_id = GetOutputBufferId(); + uint32_t buf_uint_ptr_id = GetOutputBufferUintPtrId(); + Instruction* achain_inst = + builder->AddTernaryOp(buf_uint_ptr_id, SpvOpAccessChain, buf_id, + builder->GetUintConstantId(kDebugOutputDataOffset), + data_idx_inst->result_id()); + (void)builder->AddBinaryOp(0, SpvOpStore, achain_inst->result_id(), val_id); +} + +void InstrumentPass::GenCommonStreamWriteCode(uint32_t record_sz, + uint32_t inst_id, + uint32_t stage_idx, + uint32_t base_offset_id, + InstructionBuilder* builder) { + // Store record size + GenDebugOutputFieldCode(base_offset_id, kInstCommonOutSize, + builder->GetUintConstantId(record_sz), builder); + // Store Shader Id + GenDebugOutputFieldCode(base_offset_id, kInstCommonOutShaderId, + builder->GetUintConstantId(shader_id_), builder); + // Store Instruction Idx + GenDebugOutputFieldCode(base_offset_id, kInstCommonOutInstructionIdx, inst_id, + builder); + // Store Stage Idx + GenDebugOutputFieldCode(base_offset_id, kInstCommonOutStageIdx, + builder->GetUintConstantId(stage_idx), builder); +} + +void InstrumentPass::GenFragCoordEltDebugOutputCode( + uint32_t base_offset_id, uint32_t uint_frag_coord_id, uint32_t element, + InstructionBuilder* builder) { + Instruction* element_val_inst = builder->AddIdLiteralOp( + GetUintId(), SpvOpCompositeExtract, uint_frag_coord_id, element); + GenDebugOutputFieldCode(base_offset_id, kInstFragOutFragCoordX + element, + element_val_inst->result_id(), builder); +} + +void InstrumentPass::GenBuiltinOutputCode(uint32_t builtin_id, + uint32_t builtin_off, + uint32_t base_offset_id, + InstructionBuilder* builder) { + // Load and store builtin + Instruction* load_inst = + builder->AddUnaryOp(GetUintId(), SpvOpLoad, builtin_id); + GenDebugOutputFieldCode(base_offset_id, builtin_off, load_inst->result_id(), + builder); +} + +void InstrumentPass::GenUintNullOutputCode(uint32_t field_off, + uint32_t base_offset_id, + InstructionBuilder* builder) { + GenDebugOutputFieldCode(base_offset_id, field_off, + builder->GetNullId(GetUintId()), builder); +} + +void InstrumentPass::GenStageStreamWriteCode(uint32_t stage_idx, + uint32_t base_offset_id, + InstructionBuilder* builder) { + // TODO(greg-lunarg): Add support for all stages + switch (stage_idx) { + case SpvExecutionModelVertex: { + // Load and store VertexId and InstanceId + GenBuiltinOutputCode(context()->GetBuiltinVarId(SpvBuiltInVertexId), + kInstVertOutVertexId, base_offset_id, builder); + GenBuiltinOutputCode(context()->GetBuiltinVarId(SpvBuiltInInstanceId), + kInstVertOutInstanceId, base_offset_id, builder); + } break; + case SpvExecutionModelGLCompute: { + // Load and store GlobalInvocationId. Second word is unused; store zero. + GenBuiltinOutputCode( + context()->GetBuiltinVarId(SpvBuiltInGlobalInvocationId), + kInstCompOutGlobalInvocationId, base_offset_id, builder); + GenUintNullOutputCode(kInstCompOutUnused, base_offset_id, builder); + } break; + case SpvExecutionModelGeometry: { + // Load and store PrimitiveId and InvocationId. + GenBuiltinOutputCode(context()->GetBuiltinVarId(SpvBuiltInPrimitiveId), + kInstGeomOutPrimitiveId, base_offset_id, builder); + GenBuiltinOutputCode(context()->GetBuiltinVarId(SpvBuiltInInvocationId), + kInstGeomOutInvocationId, base_offset_id, builder); + } break; + case SpvExecutionModelTessellationControl: + case SpvExecutionModelTessellationEvaluation: { + // Load and store InvocationId. Second word is unused; store zero. + GenBuiltinOutputCode(context()->GetBuiltinVarId(SpvBuiltInInvocationId), + kInstTessOutInvocationId, base_offset_id, builder); + GenUintNullOutputCode(kInstTessOutUnused, base_offset_id, builder); + } break; + case SpvExecutionModelFragment: { + // Load FragCoord and convert to Uint + Instruction* frag_coord_inst = + builder->AddUnaryOp(GetVec4FloatId(), SpvOpLoad, + context()->GetBuiltinVarId(SpvBuiltInFragCoord)); + Instruction* uint_frag_coord_inst = builder->AddUnaryOp( + GetVec4UintId(), SpvOpBitcast, frag_coord_inst->result_id()); + for (uint32_t u = 0; u < 2u; ++u) + GenFragCoordEltDebugOutputCode( + base_offset_id, uint_frag_coord_inst->result_id(), u, builder); + } break; + default: { assert(false && "unsupported stage"); } break; + } +} + +void InstrumentPass::GenDebugStreamWrite( + uint32_t instruction_idx, uint32_t stage_idx, + const std::vector& validation_ids, InstructionBuilder* builder) { + // Call debug output function. Pass func_idx, instruction_idx and + // validation ids as args. + uint32_t val_id_cnt = static_cast(validation_ids.size()); + uint32_t output_func_id = GetStreamWriteFunctionId(stage_idx, val_id_cnt); + std::vector args = {output_func_id, + builder->GetUintConstantId(instruction_idx)}; + (void)args.insert(args.end(), validation_ids.begin(), validation_ids.end()); + (void)builder->AddNaryOp(GetVoidId(), SpvOpFunctionCall, args); +} + +bool InstrumentPass::IsSameBlockOp(const Instruction* inst) const { + return inst->opcode() == SpvOpSampledImage || inst->opcode() == SpvOpImage; +} + +void InstrumentPass::CloneSameBlockOps( + std::unique_ptr* inst, + std::unordered_map* same_blk_post, + std::unordered_map* same_blk_pre, + std::unique_ptr* block_ptr) { + (*inst)->ForEachInId( + [&same_blk_post, &same_blk_pre, &block_ptr, this](uint32_t* iid) { + const auto map_itr = (*same_blk_post).find(*iid); + if (map_itr == (*same_blk_post).end()) { + const auto map_itr2 = (*same_blk_pre).find(*iid); + if (map_itr2 != (*same_blk_pre).end()) { + // Clone pre-call same-block ops, map result id. + const Instruction* in_inst = map_itr2->second; + std::unique_ptr sb_inst(in_inst->Clone(context())); + CloneSameBlockOps(&sb_inst, same_blk_post, same_blk_pre, block_ptr); + const uint32_t rid = sb_inst->result_id(); + const uint32_t nid = this->TakeNextId(); + get_decoration_mgr()->CloneDecorations(rid, nid); + sb_inst->SetResultId(nid); + (*same_blk_post)[rid] = nid; + *iid = nid; + (*block_ptr)->AddInstruction(std::move(sb_inst)); + } + } else { + // Reset same-block op operand. + *iid = map_itr->second; + } + }); +} + +void InstrumentPass::UpdateSucceedingPhis( + std::vector>& new_blocks) { + const auto first_blk = new_blocks.begin(); + const auto last_blk = new_blocks.end() - 1; + const uint32_t first_id = (*first_blk)->id(); + const uint32_t last_id = (*last_blk)->id(); + const BasicBlock& const_last_block = *last_blk->get(); + const_last_block.ForEachSuccessorLabel( + [&first_id, &last_id, this](const uint32_t succ) { + BasicBlock* sbp = this->id2block_[succ]; + sbp->ForEachPhiInst([&first_id, &last_id, this](Instruction* phi) { + bool changed = false; + phi->ForEachInId([&first_id, &last_id, &changed](uint32_t* id) { + if (*id == first_id) { + *id = last_id; + changed = true; + } + }); + if (changed) get_def_use_mgr()->AnalyzeInstUse(phi); + }); + }); +} + +// Return id for output buffer uint ptr type +uint32_t InstrumentPass::GetOutputBufferUintPtrId() { + if (output_buffer_uint_ptr_id_ == 0) { + output_buffer_uint_ptr_id_ = context()->get_type_mgr()->FindPointerToType( + GetUintId(), SpvStorageClassStorageBuffer); + } + return output_buffer_uint_ptr_id_; +} + +uint32_t InstrumentPass::GetOutputBufferBinding() { + switch (validation_id_) { + case kInstValidationIdBindless: + return kDebugOutputBindingStream; + default: + assert(false && "unexpected validation id"); + } + return 0; +} + +// Return id for output buffer +uint32_t InstrumentPass::GetOutputBufferId() { + if (output_buffer_id_ == 0) { + // If not created yet, create one + analysis::DecorationManager* deco_mgr = get_decoration_mgr(); + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + analysis::Integer uint_ty(32, false); + analysis::Type* reg_uint_ty = type_mgr->GetRegisteredType(&uint_ty); + analysis::RuntimeArray uint_rarr_ty(reg_uint_ty); + analysis::Type* reg_uint_rarr_ty = + type_mgr->GetRegisteredType(&uint_rarr_ty); + analysis::Struct obuf_ty({reg_uint_ty, reg_uint_rarr_ty}); + analysis::Type* reg_obuf_ty = type_mgr->GetRegisteredType(&obuf_ty); + uint32_t obufTyId = type_mgr->GetTypeInstruction(reg_obuf_ty); + deco_mgr->AddDecoration(obufTyId, SpvDecorationBlock); + deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputSizeOffset, + SpvDecorationOffset, 0); + deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputDataOffset, + SpvDecorationOffset, 4); + uint32_t obufTyPtrId_ = + type_mgr->FindPointerToType(obufTyId, SpvStorageClassStorageBuffer); + output_buffer_id_ = TakeNextId(); + std::unique_ptr newVarOp(new Instruction( + context(), SpvOpVariable, obufTyPtrId_, output_buffer_id_, + {{spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, + {SpvStorageClassStorageBuffer}}})); + context()->AddGlobalValue(std::move(newVarOp)); + deco_mgr->AddDecorationVal(output_buffer_id_, SpvDecorationDescriptorSet, + desc_set_); + deco_mgr->AddDecorationVal(output_buffer_id_, SpvDecorationBinding, + GetOutputBufferBinding()); + // Look for storage buffer extension. If none, create one. + if (!get_feature_mgr()->HasExtension( + kSPV_KHR_storage_buffer_storage_class)) { + const std::string ext_name("SPV_KHR_storage_buffer_storage_class"); + const auto num_chars = ext_name.size(); + // Compute num words, accommodate the terminating null character. + const auto num_words = (num_chars + 1 + 3) / 4; + std::vector ext_words(num_words, 0u); + std::memcpy(ext_words.data(), ext_name.data(), num_chars); + context()->AddExtension(std::unique_ptr( + new Instruction(context(), SpvOpExtension, 0u, 0u, + {{SPV_OPERAND_TYPE_LITERAL_STRING, ext_words}}))); + } + } + return output_buffer_id_; +} + +uint32_t InstrumentPass::GetVec4FloatId() { + if (v4float_id_ == 0) { + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + analysis::Float float_ty(32); + analysis::Type* reg_float_ty = type_mgr->GetRegisteredType(&float_ty); + analysis::Vector v4float_ty(reg_float_ty, 4); + analysis::Type* reg_v4float_ty = type_mgr->GetRegisteredType(&v4float_ty); + v4float_id_ = type_mgr->GetTypeInstruction(reg_v4float_ty); + } + return v4float_id_; +} + +uint32_t InstrumentPass::GetUintId() { + if (uint_id_ == 0) { + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + analysis::Integer uint_ty(32, false); + analysis::Type* reg_uint_ty = type_mgr->GetRegisteredType(&uint_ty); + uint_id_ = type_mgr->GetTypeInstruction(reg_uint_ty); + } + return uint_id_; +} + +uint32_t InstrumentPass::GetVec4UintId() { + if (v4uint_id_ == 0) { + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + analysis::Integer uint_ty(32, false); + analysis::Type* reg_uint_ty = type_mgr->GetRegisteredType(&uint_ty); + analysis::Vector v4uint_ty(reg_uint_ty, 4); + analysis::Type* reg_v4uint_ty = type_mgr->GetRegisteredType(&v4uint_ty); + v4uint_id_ = type_mgr->GetTypeInstruction(reg_v4uint_ty); + } + return v4uint_id_; +} + +uint32_t InstrumentPass::GetBoolId() { + if (bool_id_ == 0) { + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + analysis::Bool bool_ty; + analysis::Type* reg_bool_ty = type_mgr->GetRegisteredType(&bool_ty); + bool_id_ = type_mgr->GetTypeInstruction(reg_bool_ty); + } + return bool_id_; +} + +uint32_t InstrumentPass::GetVoidId() { + if (void_id_ == 0) { + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + analysis::Void void_ty; + analysis::Type* reg_void_ty = type_mgr->GetRegisteredType(&void_ty); + void_id_ = type_mgr->GetTypeInstruction(reg_void_ty); + } + return void_id_; +} + +uint32_t InstrumentPass::GetStreamWriteFunctionId(uint32_t stage_idx, + uint32_t val_spec_param_cnt) { + // Total param count is common params plus validation-specific + // params + uint32_t param_cnt = kInstCommonParamCnt + val_spec_param_cnt; + if (output_func_id_ == 0) { + // Create function + output_func_id_ = TakeNextId(); + analysis::TypeManager* type_mgr = context()->get_type_mgr(); + std::vector param_types; + for (uint32_t c = 0; c < param_cnt; ++c) + param_types.push_back(type_mgr->GetType(GetUintId())); + analysis::Function func_ty(type_mgr->GetType(GetVoidId()), param_types); + analysis::Type* reg_func_ty = type_mgr->GetRegisteredType(&func_ty); + std::unique_ptr func_inst(new Instruction( + get_module()->context(), SpvOpFunction, GetVoidId(), output_func_id_, + {{spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, + {SpvFunctionControlMaskNone}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, + {type_mgr->GetTypeInstruction(reg_func_ty)}}})); + get_def_use_mgr()->AnalyzeInstDefUse(&*func_inst); + std::unique_ptr output_func = + MakeUnique(std::move(func_inst)); + // Add parameters + std::vector param_vec; + for (uint32_t c = 0; c < param_cnt; ++c) { + uint32_t pid = TakeNextId(); + param_vec.push_back(pid); + std::unique_ptr param_inst( + new Instruction(get_module()->context(), SpvOpFunctionParameter, + GetUintId(), pid, {})); + get_def_use_mgr()->AnalyzeInstDefUse(&*param_inst); + output_func->AddParameter(std::move(param_inst)); + } + // Create first block + uint32_t test_blk_id = TakeNextId(); + std::unique_ptr test_label(NewLabel(test_blk_id)); + std::unique_ptr new_blk_ptr = + MakeUnique(std::move(test_label)); + InstructionBuilder builder( + context(), &*new_blk_ptr, + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); + // Gen test if debug output buffer size will not be exceeded. + uint32_t obuf_record_sz = kInstStageOutCnt + val_spec_param_cnt; + uint32_t buf_id = GetOutputBufferId(); + uint32_t buf_uint_ptr_id = GetOutputBufferUintPtrId(); + Instruction* obuf_curr_sz_ac_inst = + builder.AddBinaryOp(buf_uint_ptr_id, SpvOpAccessChain, buf_id, + builder.GetUintConstantId(kDebugOutputSizeOffset)); + // Fetch the current debug buffer written size atomically, adding the + // size of the record to be written. + uint32_t obuf_record_sz_id = builder.GetUintConstantId(obuf_record_sz); + uint32_t mask_none_id = builder.GetUintConstantId(SpvMemoryAccessMaskNone); + uint32_t scope_invok_id = builder.GetUintConstantId(SpvScopeInvocation); + Instruction* obuf_curr_sz_inst = builder.AddQuadOp( + GetUintId(), SpvOpAtomicIAdd, obuf_curr_sz_ac_inst->result_id(), + scope_invok_id, mask_none_id, obuf_record_sz_id); + uint32_t obuf_curr_sz_id = obuf_curr_sz_inst->result_id(); + // Compute new written size + Instruction* obuf_new_sz_inst = + builder.AddBinaryOp(GetUintId(), SpvOpIAdd, obuf_curr_sz_id, + builder.GetUintConstantId(obuf_record_sz)); + // Fetch the data bound + Instruction* obuf_bnd_inst = + builder.AddIdLiteralOp(GetUintId(), SpvOpArrayLength, + GetOutputBufferId(), kDebugOutputDataOffset); + // Test that new written size is less than or equal to debug output + // data bound + Instruction* obuf_safe_inst = builder.AddBinaryOp( + GetBoolId(), SpvOpULessThanEqual, obuf_new_sz_inst->result_id(), + obuf_bnd_inst->result_id()); + uint32_t merge_blk_id = TakeNextId(); + uint32_t write_blk_id = TakeNextId(); + std::unique_ptr merge_label(NewLabel(merge_blk_id)); + std::unique_ptr write_label(NewLabel(write_blk_id)); + (void)builder.AddConditionalBranch(obuf_safe_inst->result_id(), + write_blk_id, merge_blk_id, merge_blk_id, + SpvSelectionControlMaskNone); + // Close safety test block and gen write block + new_blk_ptr->SetParent(&*output_func); + output_func->AddBasicBlock(std::move(new_blk_ptr)); + new_blk_ptr = MakeUnique(std::move(write_label)); + builder.SetInsertPoint(&*new_blk_ptr); + // Generate common and stage-specific debug record members + GenCommonStreamWriteCode(obuf_record_sz, param_vec[kInstCommonParamInstIdx], + stage_idx, obuf_curr_sz_id, &builder); + GenStageStreamWriteCode(stage_idx, obuf_curr_sz_id, &builder); + // Gen writes of validation specific data + for (uint32_t i = 0; i < val_spec_param_cnt; ++i) { + GenDebugOutputFieldCode(obuf_curr_sz_id, kInstStageOutCnt + i, + param_vec[kInstCommonParamCnt + i], &builder); + } + // Close write block and gen merge block + (void)builder.AddBranch(merge_blk_id); + new_blk_ptr->SetParent(&*output_func); + output_func->AddBasicBlock(std::move(new_blk_ptr)); + new_blk_ptr = MakeUnique(std::move(merge_label)); + builder.SetInsertPoint(&*new_blk_ptr); + // Close merge block and function and add function to module + (void)builder.AddNullaryOp(0, SpvOpReturn); + new_blk_ptr->SetParent(&*output_func); + output_func->AddBasicBlock(std::move(new_blk_ptr)); + std::unique_ptr func_end_inst( + new Instruction(get_module()->context(), SpvOpFunctionEnd, 0, 0, {})); + get_def_use_mgr()->AnalyzeInstDefUse(&*func_end_inst); + output_func->SetFunctionEnd(std::move(func_end_inst)); + context()->AddFunction(std::move(output_func)); + output_func_param_cnt_ = param_cnt; + } + assert(param_cnt == output_func_param_cnt_ && "bad arg count"); + return output_func_id_; +} + +bool InstrumentPass::InstrumentFunction(Function* func, uint32_t stage_idx, + InstProcessFunction& pfn) { + bool modified = false; + // Compute function index + uint32_t function_idx = 0; + for (auto fii = get_module()->begin(); fii != get_module()->end(); ++fii) { + if (&*fii == func) break; + ++function_idx; + } + std::vector> new_blks; + // Start count after function instruction + uint32_t instruction_idx = funcIdx2offset_[function_idx] + 1; + // Using block iterators here because of block erasures and insertions. + for (auto bi = func->begin(); bi != func->end(); ++bi) { + // Count block's label + ++instruction_idx; + for (auto ii = bi->begin(); ii != bi->end(); ++instruction_idx) { + // Bump instruction count if debug instructions + instruction_idx += static_cast(ii->dbg_line_insts().size()); + // Generate instrumentation if warranted + pfn(ii, bi, instruction_idx, stage_idx, &new_blks); + if (new_blks.size() == 0) { + ++ii; + continue; + } + // If there are new blocks we know there will always be two or + // more, so update succeeding phis with label of new last block. + size_t newBlocksSize = new_blks.size(); + assert(newBlocksSize > 1); + UpdateSucceedingPhis(new_blks); + // Replace original block with new block(s) + bi = bi.Erase(); + for (auto& bb : new_blks) { + bb->SetParent(func); + } + bi = bi.InsertBefore(&new_blks); + // Reset block iterator to last new block + for (size_t i = 0; i < newBlocksSize - 1; i++) ++bi; + modified = true; + // Restart instrumenting at beginning of last new block, + // but skip over any new phi or copy instruction. + ii = bi->begin(); + if (ii->opcode() == SpvOpPhi || ii->opcode() == SpvOpCopyObject) ++ii; + new_blks.clear(); + } + } + return modified; +} + +bool InstrumentPass::InstProcessCallTreeFromRoots(InstProcessFunction& pfn, + std::queue* roots, + uint32_t stage_idx) { + bool modified = false; + std::unordered_set done; + // Process all functions from roots + while (!roots->empty()) { + const uint32_t fi = roots->front(); + roots->pop(); + if (done.insert(fi).second) { + Function* fn = id2function_.at(fi); + // Add calls first so we don't add new output function + context()->AddCalls(fn, roots); + modified = InstrumentFunction(fn, stage_idx, pfn) || modified; + } + } + return modified; +} + +bool InstrumentPass::InstProcessEntryPointCallTree(InstProcessFunction& pfn) { + // Make sure all entry points have the same execution model. Do not + // instrument if they do not. + // TODO(greg-lunarg): Handle mixed stages. Technically, a shader module + // can contain entry points with different execution models, although + // such modules will likely be rare as GLSL and HLSL are geared toward + // one model per module. In such cases we will need + // to clone any functions which are in the call trees of entrypoints + // with differing execution models. + uint32_t ecnt = 0; + uint32_t stage = SpvExecutionModelMax; + for (auto& e : get_module()->entry_points()) { + if (ecnt == 0) + stage = e.GetSingleWordInOperand(kEntryPointExecutionModelInIdx); + else if (e.GetSingleWordInOperand(kEntryPointExecutionModelInIdx) != stage) + return false; + ++ecnt; + } + // Only supporting vertex, fragment and compute shaders at the moment. + // TODO(greg-lunarg): Handle all stages. + if (stage != SpvExecutionModelVertex && stage != SpvExecutionModelFragment && + stage != SpvExecutionModelGeometry && + stage != SpvExecutionModelGLCompute && + stage != SpvExecutionModelTessellationControl && + stage != SpvExecutionModelTessellationEvaluation) + return false; + // Add together the roots of all entry points + std::queue roots; + for (auto& e : get_module()->entry_points()) { + roots.push(e.GetSingleWordInOperand(kEntryPointFunctionIdInIdx)); + } + bool modified = InstProcessCallTreeFromRoots(pfn, &roots, stage); + return modified; +} + +void InstrumentPass::InitializeInstrument() { + output_buffer_id_ = 0; + output_buffer_uint_ptr_id_ = 0; + output_func_id_ = 0; + output_func_param_cnt_ = 0; + v4float_id_ = 0; + uint_id_ = 0; + v4uint_id_ = 0; + bool_id_ = 0; + void_id_ = 0; + + // clear collections + id2function_.clear(); + id2block_.clear(); + + // Initialize function and block maps. + for (auto& fn : *get_module()) { + id2function_[fn.result_id()] = &fn; + for (auto& blk : fn) { + id2block_[blk.id()] = &blk; + } + } + + // Calculate instruction offset of first function + uint32_t pre_func_size = 0; + Module* module = get_module(); + for (auto& i : context()->capabilities()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->extensions()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->ext_inst_imports()) { + (void)i; + ++pre_func_size; + } + ++pre_func_size; // memory_model + for (auto& i : module->entry_points()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->execution_modes()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->debugs1()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->debugs2()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->debugs3()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->annotations()) { + (void)i; + ++pre_func_size; + } + for (auto& i : module->types_values()) { + pre_func_size += 1; + pre_func_size += static_cast(i.dbg_line_insts().size()); + } + funcIdx2offset_[0] = pre_func_size; + + // Set instruction offsets for all other functions. + uint32_t func_idx = 1; + auto prev_fn = get_module()->begin(); + auto curr_fn = prev_fn; + for (++curr_fn; curr_fn != get_module()->end(); ++curr_fn) { + // Count function and end instructions + uint32_t func_size = 2; + for (auto& blk : *prev_fn) { + // Count label + func_size += 1; + for (auto& inst : blk) { + func_size += 1; + func_size += static_cast(inst.dbg_line_insts().size()); + } + } + funcIdx2offset_[func_idx] = func_size; + ++prev_fn; + ++func_idx; + } +} + +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/instrument_pass.h b/3rdparty/spirv-tools/source/opt/instrument_pass.h new file mode 100644 index 000000000..cfa76b149 --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/instrument_pass.h @@ -0,0 +1,357 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIBSPIRV_OPT_INSTRUMENT_PASS_H_ +#define LIBSPIRV_OPT_INSTRUMENT_PASS_H_ + +#include +#include +#include + +#include "source/opt/ir_builder.h" +#include "source/opt/pass.h" +#include "spirv-tools/instrument.hpp" + +// This is a base class to assist in the creation of passes which instrument +// shader modules. More specifically, passes which replace instructions with a +// larger and more capable set of instructions. Commonly, these new +// instructions will add testing of operands and execute different +// instructions depending on the outcome, including outputting of debug +// information into a buffer created especially for that purpose. +// +// This class contains helper functions to create an InstProcessFunction, +// which is the heart of any derived class implementing a specific +// instrumentation pass. It takes an instruction as an argument, decides +// if it should be instrumented, and generates code to replace it. This class +// also supplies function InstProcessEntryPointCallTree which applies the +// InstProcessFunction to every reachable instruction in a module and replaces +// the instruction with new instructions if generated. +// +// Chief among the helper functions are output code generation functions, +// used to generate code in the shader which writes data to output buffers +// associated with that validation. Currently one such function, +// GenDebugStreamWrite, exists. Other such functions may be added in the +// future. Each is accompanied by documentation describing the format of +// its output buffer. +// +// A validation pass may read or write multiple buffers. All such buffers +// are located in a single debug descriptor set whose index is passed at the +// creation of the instrumentation pass. The bindings of the buffers used by +// a validation pass are permanantly assigned and fixed and documented by +// the kDebugOutput* static consts. + +namespace spvtools { +namespace opt { + +// Validation Ids +// These are used to identify the general validation being done and map to +// its output buffers. +static const uint32_t kInstValidationIdBindless = 0; + +class InstrumentPass : public Pass { + using cbb_ptr = const BasicBlock*; + + public: + using InstProcessFunction = std::function, uint32_t, uint32_t, + std::vector>*)>; + + ~InstrumentPass() override = default; + + IRContext::Analysis GetPreservedAnalyses() override { + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | + IRContext::kAnalysisNameMap | IRContext::kAnalysisBuiltinVarId | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; + } + + protected: + // Create instrumentation pass which utilizes descriptor set |desc_set| + // for debug input and output buffers and writes |shader_id| into debug + // output records. + InstrumentPass(uint32_t desc_set, uint32_t shader_id, uint32_t validation_id) + : Pass(), + desc_set_(desc_set), + shader_id_(shader_id), + validation_id_(validation_id) {} + + // Initialize state for instrumentation of module by |validation_id|. + void InitializeInstrument(); + + // Call |pfn| on all instructions in all functions in the call tree of the + // entry points in |module|. If code is generated for an instruction, replace + // the instruction's block with the new blocks that are generated. Continue + // processing at the top of the last new block. + bool InstProcessEntryPointCallTree(InstProcessFunction& pfn); + + // Move all code in |ref_block_itr| preceding the instruction |ref_inst_itr| + // to be instrumented into block |new_blk_ptr|. + void MovePreludeCode(BasicBlock::iterator ref_inst_itr, + UptrVectorIterator ref_block_itr, + std::unique_ptr* new_blk_ptr); + + // Move all code in |ref_block_itr| succeeding the instruction |ref_inst_itr| + // to be instrumented into block |new_blk_ptr|. + void MovePostludeCode(UptrVectorIterator ref_block_itr, + std::unique_ptr* new_blk_ptr); + + // Generate instructions in |builder| which will atomically fetch and + // increment the size of the debug output buffer stream of the current + // validation and write a record to the end of the stream, if enough space + // in the buffer remains. The record will contain the index of the function + // and instruction within that function |func_idx, instruction_idx| which + // generated the record. It will also contain additional information to + // identify the instance of the shader, depending on the stage |stage_idx| + // of the shader. Finally, the record will contain validation-specific + // data contained in |validation_ids| which will identify the validation + // error as well as the values involved in the error. + // + // The output buffer binding written to by the code generated by the function + // is determined by the validation id specified when each specific + // instrumentation pass is created. + // + // The output buffer is a sequence of 32-bit values with the following + // format (where all elements are unsigned 32-bit unless otherwise noted): + // + // Size + // Record0 + // Record1 + // Record2 + // ... + // + // Size is the number of 32-bit values that have been written or + // attempted to be written to the output buffer, excluding the Size. It is + // initialized to 0. If the size of attempts to write the buffer exceeds + // the actual size of the buffer, it is possible that this field can exceed + // the actual size of the buffer. + // + // Each Record* is a variable-length sequence of 32-bit values with the + // following format defined using static const offsets in the .cpp file: + // + // Record Size + // Shader ID + // Instruction Index + // Stage + // Stage-specific Word 0 + // Stage-specific Word 1 + // Validation Error Code + // Validation-specific Word 0 + // Validation-specific Word 1 + // Validation-specific Word 2 + // ... + // + // Each record consists of three subsections: members common across all + // validation, members specific to the stage, and members specific to a + // validation. + // + // The Record Size is the number of 32-bit words in the record, including + // the Record Size word. + // + // Shader ID is a value that identifies which shader has generated the + // validation error. It is passed when the instrumentation pass is created. + // + // The Instruction Index is the position of the instruction within the + // SPIR-V file which is in error. + // + // The Stage is the pipeline stage which has generated the error as defined + // by the SpvExecutionModel_ enumeration. This is used to interpret the + // following Stage-specific words. + // + // The Stage-specific Words identify which invocation of the shader generated + // the error. Every stage will write two words, although in some cases the + // second word is unused and so zero is written. Vertex shaders will write + // the Vertex and Instance ID. Fragment shaders will write FragCoord.xy. + // Compute shaders will write the Global Invocation ID and zero (unused). + // Both tesselation shaders will write the Invocation Id and zero (unused). + // The geometry shader will write the Primitive ID and Invocation ID. + // + // The Validation Error Code specifies the exact error which has occurred. + // These are enumerated with the kInstError* static consts. This allows + // multiple validation layers to use the same, single output buffer. + // + // The Validation-specific Words are a validation-specific number of 32-bit + // words which give further information on the validation error that + // occurred. These are documented further in each file containing the + // validation-specific class which derives from this base class. + // + // Because the code that is generated checks against the size of the buffer + // before writing, the size of the debug out buffer can be used by the + // validation layer to control the number of error records that are written. + void GenDebugStreamWrite(uint32_t instruction_idx, uint32_t stage_idx, + const std::vector& validation_ids, + InstructionBuilder* builder); + + // Generate code to cast |value_id| to unsigned, if needed. Return + // an id to the unsigned equivalent. + uint32_t GenUintCastCode(uint32_t value_id, InstructionBuilder* builder); + + // Return new label. + std::unique_ptr NewLabel(uint32_t label_id); + + // Return id for 32-bit unsigned type + uint32_t GetUintId(); + + // Return id for 32-bit unsigned type + uint32_t GetBoolId(); + + // Return id for void type + uint32_t GetVoidId(); + + // Return id for output buffer uint type + uint32_t GetOutputBufferUintPtrId(); + + // Return binding for output buffer for current validation. + uint32_t GetOutputBufferBinding(); + + // Return id for debug output buffer + uint32_t GetOutputBufferId(); + + // Return id for v4float type + uint32_t GetVec4FloatId(); + + // Return id for v4uint type + uint32_t GetVec4UintId(); + + // Return id for output function. Define if it doesn't exist with + // |val_spec_arg_cnt| validation-specific uint32 arguments. + uint32_t GetStreamWriteFunctionId(uint32_t stage_idx, + uint32_t val_spec_param_cnt); + + // Apply instrumentation function |pfn| to every instruction in |func|. + // If code is generated for an instruction, replace the instruction's + // block with the new blocks that are generated. Continue processing at the + // top of the last new block. + bool InstrumentFunction(Function* func, uint32_t stage_idx, + InstProcessFunction& pfn); + + // Call |pfn| on all functions in the call tree of the function + // ids in |roots|. + bool InstProcessCallTreeFromRoots(InstProcessFunction& pfn, + std::queue* roots, + uint32_t stage_idx); + + // Gen code into |builder| to write |field_value_id| into debug output + // buffer at |base_offset_id| + |field_offset|. + void GenDebugOutputFieldCode(uint32_t base_offset_id, uint32_t field_offset, + uint32_t field_value_id, + InstructionBuilder* builder); + + // Generate instructions into |builder| which will write the members + // of the debug output record common for all stages and validations at + // |base_off|. + void GenCommonStreamWriteCode(uint32_t record_sz, uint32_t instruction_idx, + uint32_t stage_idx, uint32_t base_off, + InstructionBuilder* builder); + + // Generate instructions into |builder| which will write + // |uint_frag_coord_id| at |component| of the record at |base_offset_id| of + // the debug output buffer . + void GenFragCoordEltDebugOutputCode(uint32_t base_offset_id, + uint32_t uint_frag_coord_id, + uint32_t component, + InstructionBuilder* builder); + + // Generate instructions into |builder| which will load the uint |builtin_id| + // and write it into the debug output buffer at |base_off| + |builtin_off|. + void GenBuiltinOutputCode(uint32_t builtin_id, uint32_t builtin_off, + uint32_t base_off, InstructionBuilder* builder); + + // Generate instructions into |builder| which will write a uint null into + // the debug output buffer at |base_off| + |builtin_off|. + void GenUintNullOutputCode(uint32_t field_off, uint32_t base_off, + InstructionBuilder* builder); + + // Generate instructions into |builder| which will write the |stage_idx|- + // specific members of the debug output stream at |base_off|. + void GenStageStreamWriteCode(uint32_t stage_idx, uint32_t base_off, + InstructionBuilder* builder); + + // Return true if instruction must be in the same block that its result + // is used. + bool IsSameBlockOp(const Instruction* inst) const; + + // Clone operands which must be in same block as consumer instructions. + // Look in same_blk_pre for instructions that need cloning. Look in + // same_blk_post for instructions already cloned. Add cloned instruction + // to same_blk_post. + void CloneSameBlockOps( + std::unique_ptr* inst, + std::unordered_map* same_blk_post, + std::unordered_map* same_blk_pre, + std::unique_ptr* block_ptr); + + // Update phis in succeeding blocks to point to new last block + void UpdateSucceedingPhis( + std::vector>& new_blocks); + + // Debug descriptor set index + uint32_t desc_set_; + + // Shader module ID written into output record + uint32_t shader_id_; + + // Map from function id to function pointer. + std::unordered_map id2function_; + + // Map from block's label id to block. TODO(dnovillo): This is superfluous wrt + // CFG. It has functionality not present in CFG. Consolidate. + std::unordered_map id2block_; + + // Map from function's position index to the offset of its first instruction + std::unordered_map funcIdx2offset_; + + // result id for OpConstantFalse + uint32_t validation_id_; + + // id for output buffer variable + uint32_t output_buffer_id_; + + // type id for output buffer element + uint32_t output_buffer_uint_ptr_id_; + + // id for debug output function + uint32_t output_func_id_; + + // param count for output function + uint32_t output_func_param_cnt_; + + // id for v4float type + uint32_t v4float_id_; + + // id for v4float type + uint32_t v4uint_id_; + + // id for 32-bit unsigned type + uint32_t uint_id_; + + // id for bool type + uint32_t bool_id_; + + // id for void type + uint32_t void_id_; + + // Pre-instrumentation same-block insts + std::unordered_map same_block_pre_; + + // Post-instrumentation same-block op ids + std::unordered_map same_block_post_; +}; + +} // namespace opt +} // namespace spvtools + +#endif // LIBSPIRV_OPT_INSTRUMENT_PASS_H_ diff --git a/3rdparty/spirv-tools/source/opt/ir_builder.h b/3rdparty/spirv-tools/source/opt/ir_builder.h index 2dab76e52..2f741d88e 100644 --- a/3rdparty/spirv-tools/source/opt/ir_builder.h +++ b/3rdparty/spirv-tools/source/opt/ir_builder.h @@ -58,6 +58,85 @@ class InstructionBuilder { : InstructionBuilder(context, parent_block, parent_block->end(), preserved_analyses) {} + Instruction* AddNullaryOp(uint32_t type_id, SpvOp opcode) { + // TODO(1841): Handle id overflow. + std::unique_ptr newUnOp(new Instruction( + GetContext(), opcode, type_id, + opcode == SpvOpReturn ? 0 : GetContext()->TakeNextId(), {})); + return AddInstruction(std::move(newUnOp)); + } + + Instruction* AddUnaryOp(uint32_t type_id, SpvOp opcode, uint32_t operand1) { + // TODO(1841): Handle id overflow. + std::unique_ptr newUnOp(new Instruction( + GetContext(), opcode, type_id, GetContext()->TakeNextId(), + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand1}}})); + return AddInstruction(std::move(newUnOp)); + } + + Instruction* AddBinaryOp(uint32_t type_id, SpvOp opcode, uint32_t operand1, + uint32_t operand2) { + // TODO(1841): Handle id overflow. + std::unique_ptr newBinOp(new Instruction( + GetContext(), opcode, type_id, + opcode == SpvOpStore ? 0 : GetContext()->TakeNextId(), + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand1}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand2}}})); + return AddInstruction(std::move(newBinOp)); + } + + Instruction* AddTernaryOp(uint32_t type_id, SpvOp opcode, uint32_t operand1, + uint32_t operand2, uint32_t operand3) { + // TODO(1841): Handle id overflow. + std::unique_ptr newTernOp(new Instruction( + GetContext(), opcode, type_id, GetContext()->TakeNextId(), + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand1}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand2}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand3}}})); + return AddInstruction(std::move(newTernOp)); + } + + Instruction* AddQuadOp(uint32_t type_id, SpvOp opcode, uint32_t operand1, + uint32_t operand2, uint32_t operand3, + uint32_t operand4) { + // TODO(1841): Handle id overflow. + std::unique_ptr newQuadOp(new Instruction( + GetContext(), opcode, type_id, GetContext()->TakeNextId(), + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand1}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand2}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand3}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand4}}})); + return AddInstruction(std::move(newQuadOp)); + } + + Instruction* AddIdLiteralOp(uint32_t type_id, SpvOp opcode, uint32_t operand1, + uint32_t operand2) { + // TODO(1841): Handle id overflow. + std::unique_ptr newBinOp(new Instruction( + GetContext(), opcode, type_id, GetContext()->TakeNextId(), + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {operand1}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {operand2}}})); + return AddInstruction(std::move(newBinOp)); + } + + // Creates an N-ary instruction of |opcode|. + // |typid| must be the id of the instruction's type. + // |operands| must be a sequence of operand ids. + // Use |result| for the result id if non-zero. + Instruction* AddNaryOp(uint32_t type_id, SpvOp opcode, + const std::vector& operands, + uint32_t result = 0) { + std::vector ops; + for (size_t i = 0; i < operands.size(); i++) { + ops.push_back({SPV_OPERAND_TYPE_ID, {operands[i]}}); + } + // TODO(1841): Handle id overflow. + std::unique_ptr new_inst(new Instruction( + GetContext(), opcode, type_id, + result != 0 ? result : GetContext()->TakeNextId(), ops)); + return AddInstruction(std::move(new_inst)); + } + // Creates a new selection merge instruction. // The id |merge_id| is the merge basic block id. Instruction* AddSelectionMerge( @@ -71,6 +150,20 @@ class InstructionBuilder { return AddInstruction(std::move(new_branch_merge)); } + // Creates a new loop merge instruction. + // The id |merge_id| is the basic block id of the merge block. + // |continue_id| is the id of the continue block. + // |loop_control| are the loop control flags to be added to the instruction. + Instruction* AddLoopMerge(uint32_t merge_id, uint32_t continue_id, + uint32_t loop_control = SpvLoopControlMaskNone) { + std::unique_ptr new_branch_merge(new Instruction( + GetContext(), SpvOpLoopMerge, 0, 0, + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {merge_id}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {continue_id}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LOOP_CONTROL, {loop_control}}})); + return AddInstruction(std::move(new_branch_merge)); + } + // Creates a new branch instruction to |label_id|. // Note that the user must make sure the final basic block is // well formed. @@ -153,15 +246,10 @@ class InstructionBuilder { // The id |type| must be the id of the phi instruction's type. // The vector |incomings| must be a sequence of pairs of . - Instruction* AddPhi(uint32_t type, const std::vector& incomings) { + Instruction* AddPhi(uint32_t type, const std::vector& incomings, + uint32_t result = 0) { assert(incomings.size() % 2 == 0 && "A sequence of pairs is expected"); - std::vector phi_ops; - for (size_t i = 0; i < incomings.size(); i++) { - phi_ops.push_back({SPV_OPERAND_TYPE_ID, {incomings[i]}}); - } - std::unique_ptr phi_inst(new Instruction( - GetContext(), SpvOpPhi, type, GetContext()->TakeNextId(), phi_ops)); - return AddInstruction(std::move(phi_inst)); + return AddNaryOp(type, SpvOpPhi, incomings, result); } // Creates an addition instruction. @@ -170,6 +258,7 @@ class InstructionBuilder { // The id |op1| is the left hand side of the operation. // The id |op2| is the right hand side of the operation. Instruction* AddIAdd(uint32_t type, uint32_t op1, uint32_t op2) { + // TODO(1841): Handle id overflow. std::unique_ptr inst(new Instruction( GetContext(), SpvOpIAdd, type, GetContext()->TakeNextId(), {{SPV_OPERAND_TYPE_ID, {op1}}, {SPV_OPERAND_TYPE_ID, {op2}}})); @@ -183,6 +272,7 @@ class InstructionBuilder { Instruction* AddULessThan(uint32_t op1, uint32_t op2) { analysis::Bool bool_type; uint32_t type = GetContext()->get_type_mgr()->GetId(&bool_type); + // TODO(1841): Handle id overflow. std::unique_ptr inst(new Instruction( GetContext(), SpvOpULessThan, type, GetContext()->TakeNextId(), {{SPV_OPERAND_TYPE_ID, {op1}}, {SPV_OPERAND_TYPE_ID, {op2}}})); @@ -196,6 +286,7 @@ class InstructionBuilder { Instruction* AddSLessThan(uint32_t op1, uint32_t op2) { analysis::Bool bool_type; uint32_t type = GetContext()->get_type_mgr()->GetId(&bool_type); + // TODO(1841): Handle id overflow. std::unique_ptr inst(new Instruction( GetContext(), SpvOpSLessThan, type, GetContext()->TakeNextId(), {{SPV_OPERAND_TYPE_ID, {op1}}, {SPV_OPERAND_TYPE_ID, {op2}}})); @@ -225,6 +316,7 @@ class InstructionBuilder { // bool) for |type|. Instruction* AddSelect(uint32_t type, uint32_t cond, uint32_t true_value, uint32_t false_value) { + // TODO(1841): Handle id overflow. std::unique_ptr select(new Instruction( GetContext(), SpvOpSelect, type, GetContext()->TakeNextId(), std::initializer_list{{SPV_OPERAND_TYPE_ID, {cond}}, @@ -235,8 +327,8 @@ class InstructionBuilder { // Adds a signed int32 constant to the binary. // The |value| parameter is the constant value to be added. - Instruction* Add32BitSignedIntegerConstant(int32_t value) { - return Add32BitConstantInteger(value, true); + Instruction* GetSintConstant(int32_t value) { + return GetIntConstant(value, true); } // Create a composite construct. @@ -249,6 +341,7 @@ class InstructionBuilder { ops.emplace_back(SPV_OPERAND_TYPE_ID, std::initializer_list{id}); } + // TODO(1841): Handle id overflow. std::unique_ptr construct( new Instruction(GetContext(), SpvOpCompositeConstruct, type, GetContext()->TakeNextId(), ops)); @@ -256,8 +349,23 @@ class InstructionBuilder { } // Adds an unsigned int32 constant to the binary. // The |value| parameter is the constant value to be added. - Instruction* Add32BitUnsignedIntegerConstant(uint32_t value) { - return Add32BitConstantInteger(value, false); + Instruction* GetUintConstant(uint32_t value) { + return GetIntConstant(value, false); + } + + uint32_t GetUintConstantId(uint32_t value) { + Instruction* uint_inst = GetUintConstant(value); + return uint_inst->result_id(); + } + + uint32_t GetNullId(uint32_t type_id) { + analysis::TypeManager* type_mgr = GetContext()->get_type_mgr(); + analysis::ConstantManager* const_mgr = GetContext()->get_constant_mgr(); + const analysis::Type* type = type_mgr->GetType(type_id); + const analysis::Constant* null_const = const_mgr->GetConstant(type, {}); + Instruction* null_inst = + const_mgr->GetDefiningInstruction(null_const, type_id); + return null_inst->result_id(); } // Adds either a signed or unsigned 32 bit integer constant to the binary @@ -265,7 +373,7 @@ class InstructionBuilder { // signed constant otherwise as an unsigned constant. If |sign| is false the // value must not be a negative number. template - Instruction* Add32BitConstantInteger(T value, bool sign) { + Instruction* GetIntConstant(T value, bool sign) { // Assert that we are not trying to store a negative number in an unsigned // type. if (!sign) @@ -305,6 +413,7 @@ class InstructionBuilder { operands.push_back({SPV_OPERAND_TYPE_LITERAL_INTEGER, {index}}); } + // TODO(1841): Handle id overflow. std::unique_ptr new_inst( new Instruction(GetContext(), SpvOpCompositeExtract, type, GetContext()->TakeNextId(), operands)); @@ -328,6 +437,7 @@ class InstructionBuilder { operands.push_back({SPV_OPERAND_TYPE_ID, {index_id}}); } + // TODO(1841): Handle id overflow. std::unique_ptr new_inst( new Instruction(GetContext(), SpvOpAccessChain, type_id, GetContext()->TakeNextId(), operands)); @@ -338,6 +448,7 @@ class InstructionBuilder { std::vector operands; operands.push_back({SPV_OPERAND_TYPE_ID, {base_ptr_id}}); + // TODO(1841): Handle id overflow. std::unique_ptr new_inst( new Instruction(GetContext(), SpvOpLoad, type_id, GetContext()->TakeNextId(), operands)); diff --git a/3rdparty/spirv-tools/source/opt/ir_context.cpp b/3rdparty/spirv-tools/source/opt/ir_context.cpp index 742ac1f62..a2f207c0c 100644 --- a/3rdparty/spirv-tools/source/opt/ir_context.cpp +++ b/3rdparty/spirv-tools/source/opt/ir_context.cpp @@ -21,6 +21,16 @@ #include "source/opt/mem_pass.h" #include "source/opt/reflect.h" +namespace { + +static const int kSpvDecorateTargetIdInIdx = 0; +static const int kSpvDecorateDecorationInIdx = 1; +static const int kSpvDecorateBuiltinInIdx = 2; +static const int kEntryPointInterfaceInIdx = 3; +static const int kEntryPointFunctionIdInIdx = 1; + +} // anonymous namespace + namespace spvtools { namespace opt { @@ -43,6 +53,9 @@ void IRContext::BuildInvalidAnalyses(IRContext::Analysis set) { if (set & kAnalysisLoopAnalysis) { ResetLoopAnalysis(); } + if (set & kAnalysisBuiltinVarId) { + ResetBuiltinAnalysis(); + } if (set & kAnalysisNameMap) { BuildIdToNameMap(); } @@ -55,6 +68,18 @@ void IRContext::BuildInvalidAnalyses(IRContext::Analysis set) { if (set & kAnalysisValueNumberTable) { BuildValueNumberTable(); } + if (set & kAnalysisStructuredCFG) { + BuildStructuredCFGAnalysis(); + } + if (set & kAnalysisIdToFuncMapping) { + BuildIdToFuncMapping(); + } + if (set & kAnalysisConstants) { + BuildConstantManager(); + } + if (set & kAnalysisTypes) { + BuildTypeManager(); + } } void IRContext::InvalidateAnalysesExceptFor( @@ -76,6 +101,9 @@ void IRContext::InvalidateAnalyses(IRContext::Analysis analyses_to_invalidate) { if (analyses_to_invalidate & kAnalysisCombinators) { combinator_ops_.clear(); } + if (analyses_to_invalidate & kAnalysisBuiltinVarId) { + builtin_var_id_map_.clear(); + } if (analyses_to_invalidate & kAnalysisCFG) { cfg_.reset(nullptr); } @@ -89,6 +117,18 @@ void IRContext::InvalidateAnalyses(IRContext::Analysis analyses_to_invalidate) { if (analyses_to_invalidate & kAnalysisValueNumberTable) { vn_table_.reset(nullptr); } + if (analyses_to_invalidate & kAnalysisStructuredCFG) { + struct_cfg_analysis_.reset(nullptr); + } + if (analyses_to_invalidate & kAnalysisIdToFuncMapping) { + id_to_func_.clear(); + } + if (analyses_to_invalidate & kAnalysisConstants) { + constant_mgr_.reset(nullptr); + } + if (analyses_to_invalidate & kAnalysisTypes) { + type_mgr_.reset(nullptr); + } valid_analyses_ = Analysis(valid_analyses_ & ~analyses_to_invalidate); } @@ -107,9 +147,6 @@ Instruction* IRContext::KillInst(Instruction* inst) { instr_to_block_.erase(inst); } if (AreAnalysesValid(kAnalysisDecorations)) { - if (inst->result_id() != 0) { - decoration_mgr_->RemoveDecorationsFrom(inst->result_id()); - } if (inst->IsDecoration()) { decoration_mgr_->RemoveDecoration(inst); } @@ -227,6 +264,14 @@ bool IRContext::IsConsistent() { return false; } + if (AreAnalysesValid(kAnalysisDecorations)) { + analysis::DecorationManager* dec_mgr = get_decoration_mgr(); + analysis::DecorationManager current(module()); + + if (*dec_mgr != current) { + return false; + } + } return true; } @@ -258,12 +303,8 @@ void IRContext::AnalyzeUses(Instruction* inst) { } void IRContext::KillNamesAndDecorates(uint32_t id) { - std::vector decorations = - get_decoration_mgr()->GetDecorationsFor(id, true); - - for (Instruction* inst : decorations) { - KillInst(inst); - } + analysis::DecorationManager* dec_mgr = get_decoration_mgr(); + dec_mgr->RemoveDecorationsFrom(id); std::vector name_to_kill; for (auto name : GetNames(id)) { @@ -299,6 +340,7 @@ void IRContext::AddCombinatorsForCapability(uint32_t capability) { SpvOpTypeImage, SpvOpTypeSampler, SpvOpTypeSampledImage, + SpvOpTypeAccelerationStructureNV, SpvOpTypeArray, SpvOpTypeRuntimeArray, SpvOpTypeStruct, @@ -574,6 +616,156 @@ LoopDescriptor* IRContext::GetLoopDescriptor(const Function* f) { return &it->second; } +uint32_t IRContext::FindBuiltinVar(uint32_t builtin) { + for (auto& a : module_->annotations()) { + if (a.opcode() != SpvOpDecorate) continue; + if (a.GetSingleWordInOperand(kSpvDecorateDecorationInIdx) != + SpvDecorationBuiltIn) + continue; + if (a.GetSingleWordInOperand(kSpvDecorateBuiltinInIdx) != builtin) continue; + uint32_t target_id = a.GetSingleWordInOperand(kSpvDecorateTargetIdInIdx); + Instruction* b_var = get_def_use_mgr()->GetDef(target_id); + if (b_var->opcode() != SpvOpVariable) continue; + return target_id; + } + return 0; +} + +void IRContext::AddVarToEntryPoints(uint32_t var_id) { + uint32_t ocnt = 0; + for (auto& e : module()->entry_points()) { + bool found = false; + e.ForEachInOperand([&ocnt, &found, &var_id](const uint32_t* idp) { + if (ocnt >= kEntryPointInterfaceInIdx) { + if (*idp == var_id) found = true; + } + ++ocnt; + }); + if (!found) { + e.AddOperand({SPV_OPERAND_TYPE_ID, {var_id}}); + get_def_use_mgr()->AnalyzeInstDefUse(&e); + } + } +} + +uint32_t IRContext::GetBuiltinVarId(uint32_t builtin) { + if (!AreAnalysesValid(kAnalysisBuiltinVarId)) ResetBuiltinAnalysis(); + // If cached, return it. + std::unordered_map::iterator it = + builtin_var_id_map_.find(builtin); + if (it != builtin_var_id_map_.end()) return it->second; + // Look for one in shader + uint32_t var_id = FindBuiltinVar(builtin); + if (var_id == 0) { + // If not found, create it + // TODO(greg-lunarg): Add support for all builtins + analysis::TypeManager* type_mgr = get_type_mgr(); + analysis::Type* reg_type; + switch (builtin) { + case SpvBuiltInFragCoord: { + analysis::Float float_ty(32); + analysis::Type* reg_float_ty = type_mgr->GetRegisteredType(&float_ty); + analysis::Vector v4float_ty(reg_float_ty, 4); + reg_type = type_mgr->GetRegisteredType(&v4float_ty); + break; + } + case SpvBuiltInVertexId: + case SpvBuiltInInstanceId: + case SpvBuiltInPrimitiveId: + case SpvBuiltInInvocationId: + case SpvBuiltInGlobalInvocationId: { + analysis::Integer uint_ty(32, false); + reg_type = type_mgr->GetRegisteredType(&uint_ty); + break; + } + default: { + assert(false && "unhandled builtin"); + return 0; + } + } + uint32_t type_id = type_mgr->GetTypeInstruction(reg_type); + uint32_t varTyPtrId = + type_mgr->FindPointerToType(type_id, SpvStorageClassInput); + // TODO(1841): Handle id overflow. + var_id = TakeNextId(); + std::unique_ptr newVarOp( + new Instruction(this, SpvOpVariable, varTyPtrId, var_id, + {{spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, + {SpvStorageClassInput}}})); + get_def_use_mgr()->AnalyzeInstDefUse(&*newVarOp); + module()->AddGlobalValue(std::move(newVarOp)); + get_decoration_mgr()->AddDecorationVal(var_id, SpvDecorationBuiltIn, + builtin); + AddVarToEntryPoints(var_id); + } + builtin_var_id_map_[builtin] = var_id; + return var_id; +} + +void IRContext::AddCalls(const Function* func, std::queue* todo) { + for (auto bi = func->begin(); bi != func->end(); ++bi) + for (auto ii = bi->begin(); ii != bi->end(); ++ii) + if (ii->opcode() == SpvOpFunctionCall) + todo->push(ii->GetSingleWordInOperand(0)); +} + +bool IRContext::ProcessEntryPointCallTree(ProcessFunction& pfn) { + // Collect all of the entry points as the roots. + std::queue roots; + for (auto& e : module()->entry_points()) { + roots.push(e.GetSingleWordInOperand(kEntryPointFunctionIdInIdx)); + } + return ProcessCallTreeFromRoots(pfn, &roots); +} + +bool IRContext::ProcessReachableCallTree(ProcessFunction& pfn) { + std::queue roots; + + // Add all entry points since they can be reached from outside the module. + for (auto& e : module()->entry_points()) + roots.push(e.GetSingleWordInOperand(kEntryPointFunctionIdInIdx)); + + // Add all exported functions since they can be reached from outside the + // module. + for (auto& a : annotations()) { + // TODO: Handle group decorations as well. Currently not generate by any + // front-end, but could be coming. + if (a.opcode() == SpvOp::SpvOpDecorate) { + if (a.GetSingleWordOperand(1) == + SpvDecoration::SpvDecorationLinkageAttributes) { + uint32_t lastOperand = a.NumOperands() - 1; + if (a.GetSingleWordOperand(lastOperand) == + SpvLinkageType::SpvLinkageTypeExport) { + uint32_t id = a.GetSingleWordOperand(0); + if (GetFunction(id)) { + roots.push(id); + } + } + } + } + } + + return ProcessCallTreeFromRoots(pfn, &roots); +} + +bool IRContext::ProcessCallTreeFromRoots(ProcessFunction& pfn, + std::queue* roots) { + // Process call tree + bool modified = false; + std::unordered_set done; + + while (!roots->empty()) { + const uint32_t fi = roots->front(); + roots->pop(); + if (done.insert(fi).second) { + Function* fn = GetFunction(fi); + modified = pfn(fn) || modified; + AddCalls(fn, roots); + } + } + return modified; +} + // Gets the dominator analysis for function |f|. DominatorAnalysis* IRContext::GetDominatorAnalysis(const Function* f) { if (!AreAnalysesValid(kAnalysisDominatorAnalysis)) { diff --git a/3rdparty/spirv-tools/source/opt/ir_context.h b/3rdparty/spirv-tools/source/opt/ir_context.h index a9d892fa2..185b4944e 100644 --- a/3rdparty/spirv-tools/source/opt/ir_context.h +++ b/3rdparty/spirv-tools/source/opt/ir_context.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,7 @@ #include "source/opt/module.h" #include "source/opt/register_pressure.h" #include "source/opt/scalar_analysis.h" +#include "source/opt/struct_cfg_analysis.h" #include "source/opt/type_manager.h" #include "source/opt/value_number_table.h" #include "source/util/make_unique.h" @@ -71,9 +73,16 @@ class IRContext { kAnalysisScalarEvolution = 1 << 8, kAnalysisRegisterPressure = 1 << 9, kAnalysisValueNumberTable = 1 << 10, - kAnalysisEnd = 1 << 11 + kAnalysisStructuredCFG = 1 << 11, + kAnalysisBuiltinVarId = 1 << 12, + kAnalysisIdToFuncMapping = 1 << 13, + kAnalysisConstants = 1 << 14, + kAnalysisTypes = 1 << 15, + kAnalysisEnd = 1 << 16 }; + using ProcessFunction = std::function; + friend inline Analysis operator|(Analysis lhs, Analysis rhs); friend inline Analysis& operator|=(Analysis& lhs, Analysis rhs); friend inline Analysis operator<<(Analysis a, int shift); @@ -90,7 +99,8 @@ class IRContext { valid_analyses_(kAnalysisNone), constant_mgr_(nullptr), type_mgr_(nullptr), - id_to_name_(nullptr) { + id_to_name_(nullptr), + max_id_bound_(kDefaultMaxIdBound) { SetContextMessageConsumer(syntax_context_, consumer_); module_->SetContext(this); } @@ -104,7 +114,8 @@ class IRContext { def_use_mgr_(nullptr), valid_analyses_(kAnalysisNone), type_mgr_(nullptr), - id_to_name_(nullptr) { + id_to_name_(nullptr), + max_id_bound_(kDefaultMaxIdBound) { SetContextMessageConsumer(syntax_context_, consumer_); module_->SetContext(this); InitializeCombinators(); @@ -225,6 +236,15 @@ class IRContext { return vn_table_.get(); } + // Returns a pointer to a StructuredCFGAnalysis. If the analysis is invalid, + // it is rebuilt first. + StructuredCFGAnalysis* GetStructuredCFGAnalysis() { + if (!AreAnalysesValid(kAnalysisStructuredCFG)) { + BuildStructuredCFGAnalysis(); + } + return struct_cfg_analysis_.get(); + } + // Returns a pointer to a liveness analysis. If the liveness analysis is // invalid, it is rebuilt first. LivenessAnalysis* GetLivenessAnalysis() { @@ -274,8 +294,9 @@ class IRContext { // created yet, it creates one. NOTE: Once created, the constant manager // remains active and it is never re-built. analysis::ConstantManager* get_constant_mgr() { - if (!constant_mgr_) - constant_mgr_ = MakeUnique(this); + if (!AreAnalysesValid(kAnalysisConstants)) { + BuildConstantManager(); + } return constant_mgr_.get(); } @@ -283,8 +304,9 @@ class IRContext { // yet, it creates one. NOTE: Once created, the type manager remains active it // is never re-built. analysis::TypeManager* get_type_mgr() { - if (!type_mgr_) - type_mgr_ = MakeUnique(consumer(), this); + if (!AreAnalysesValid(kAnalysisTypes)) { + BuildTypeManager(); + } return type_mgr_.get(); } @@ -432,7 +454,8 @@ class IRContext { post_dominator_trees_.erase(f); } - // Return the next available SSA id and increment it. + // Return the next available SSA id and increment it. Returns 0 if the + // maximum SSA id has been reached. inline uint32_t TakeNextId() { return module()->TakeNextIdBound(); } FeatureManager* get_feature_mgr() { @@ -456,6 +479,51 @@ class IRContext { return *inst_folder_; } + uint32_t max_id_bound() const { return max_id_bound_; } + void set_max_id_bound(uint32_t new_bound) { max_id_bound_ = new_bound; } + + // Return id of variable only decorated with |builtin|, if in module. + // Create variable and return its id otherwise. If builtin not currently + // supported, return 0. + uint32_t GetBuiltinVarId(uint32_t builtin); + + // Returns the function whose id is |id|, if one exists. Returns |nullptr| + // otherwise. + Function* GetFunction(uint32_t id) { + if (!AreAnalysesValid(kAnalysisIdToFuncMapping)) { + BuildIdToFuncMapping(); + } + auto entry = id_to_func_.find(id); + return (entry != id_to_func_.end()) ? entry->second : nullptr; + } + + Function* GetFunction(Instruction* inst) { + if (inst->opcode() != SpvOpFunction) { + return nullptr; + } + return GetFunction(inst->result_id()); + } + + // Add to |todo| all ids of functions called in |func|. + void AddCalls(const Function* func, std::queue* todo); + + // Applies |pfn| to every function in the call trees that are rooted at the + // entry points. Returns true if any call |pfn| returns true. By convention + // |pfn| should return true if it modified the module. + bool ProcessEntryPointCallTree(ProcessFunction& pfn); + + // Applies |pfn| to every function in the call trees rooted at the entry + // points and exported functions. Returns true if any call |pfn| returns + // true. By convention |pfn| should return true if it modified the module. + bool ProcessReachableCallTree(ProcessFunction& pfn); + + // Applies |pfn| to every function in the call trees rooted at the elements of + // |roots|. Returns true if any call to |pfn| returns true. By convention + // |pfn| should return true if it modified the module. After returning + // |roots| will be empty. + bool ProcessCallTreeFromRoots(ProcessFunction& pfn, + std::queue* roots); + private: // Builds the def-use manager from scratch, even if it was already valid. void BuildDefUseManager() { @@ -476,6 +544,15 @@ class IRContext { valid_analyses_ = valid_analyses_ | kAnalysisInstrToBlockMapping; } + // Builds the instruction-function map for the whole module. + void BuildIdToFuncMapping() { + id_to_func_.clear(); + for (auto& fn : *module_) { + id_to_func_[fn.result_id()] = &fn; + } + valid_analyses_ = valid_analyses_ | kAnalysisIdToFuncMapping; + } + void BuildDecorationManager() { decoration_mgr_ = MakeUnique(module()); valid_analyses_ = valid_analyses_ | kAnalysisDecorations; @@ -504,6 +581,27 @@ class IRContext { valid_analyses_ = valid_analyses_ | kAnalysisValueNumberTable; } + // Builds the structured CFG analysis from scratch, even if it was already + // valid. + void BuildStructuredCFGAnalysis() { + struct_cfg_analysis_ = MakeUnique(this); + valid_analyses_ = valid_analyses_ | kAnalysisStructuredCFG; + } + + // Builds the constant manager from scratch, even if it was already + // valid. + void BuildConstantManager() { + constant_mgr_ = MakeUnique(this); + valid_analyses_ = valid_analyses_ | kAnalysisConstants; + } + + // Builds the type manager from scratch, even if it was already + // valid. + void BuildTypeManager() { + type_mgr_ = MakeUnique(consumer(), this); + valid_analyses_ = valid_analyses_ | kAnalysisTypes; + } + // Removes all computed dominator and post-dominator trees. This will force // the context to rebuild the trees on demand. void ResetDominatorAnalysis() { @@ -520,6 +618,13 @@ class IRContext { valid_analyses_ = valid_analyses_ | kAnalysisLoopAnalysis; } + // Removes all computed loop descriptors. + void ResetBuiltinAnalysis() { + // Clear the cache. + builtin_var_id_map_.clear(); + valid_analyses_ = valid_analyses_ | kAnalysisBuiltinVarId; + } + // Analyzes the features in the owned module. Builds the manager if required. void AnalyzeFeatures() { feature_mgr_ = MakeUnique(grammar_); @@ -543,6 +648,13 @@ class IRContext { // true if the cfg is invalidated. bool CheckCFG(); + // Return id of variable only decorated with |builtin|, if in module. + // Return 0 otherwise. + uint32_t FindBuiltinVar(uint32_t builtin); + + // Add |var_id| to all entry points in module. + void AddVarToEntryPoints(uint32_t var_id); + // The SPIR-V syntax context containing grammar tables for opcodes and // operands. spv_context syntax_context_; @@ -570,13 +682,20 @@ class IRContext { std::unique_ptr decoration_mgr_; std::unique_ptr feature_mgr_; - // A map from instructions the the basic block they belong to. This mapping is + // A map from instructions to the basic block they belong to. This mapping is // built on-demand when get_instr_block() is called. // // NOTE: Do not traverse this map. Ever. Use the function and basic block // iterators to traverse instructions. std::unordered_map instr_to_block_; + // A map from ids to the function they define. This mapping is + // built on-demand when GetFunction() is called. + // + // NOTE: Do not traverse this map. Ever. Use the function and basic block + // iterators to traverse instructions. + std::unordered_map id_to_func_; + // A bitset indicating which analyes are currently valid. Analysis valid_analyses_; @@ -584,6 +703,10 @@ class IRContext { // without side-effect. std::unordered_map> combinator_ops_; + // Opcodes of shader capability core executable instructions + // without side-effect. + std::unordered_map builtin_var_id_map_; + // The CFG for all the functions in |module_|. std::unique_ptr cfg_; @@ -613,6 +736,11 @@ class IRContext { std::unique_ptr vn_table_; std::unique_ptr inst_folder_; + + std::unique_ptr struct_cfg_analysis_; + + // The maximum legal value for the id bound. + uint32_t max_id_bound_; }; inline IRContext::Analysis operator|(IRContext::Analysis lhs, @@ -758,6 +886,9 @@ void IRContext::AddCapability(std::unique_ptr&& c) { } void IRContext::AddExtension(std::unique_ptr&& e) { + if (AreAnalysesValid(kAnalysisDefUse)) { + get_def_use_mgr()->AnalyzeInstDefUse(e.get()); + } module()->AddExtension(std::move(e)); } @@ -799,6 +930,9 @@ void IRContext::AddAnnotationInst(std::unique_ptr&& a) { if (AreAnalysesValid(kAnalysisDecorations)) { get_decoration_mgr()->AddDecoration(a.get()); } + if (AreAnalysesValid(kAnalysisDefUse)) { + get_def_use_mgr()->AnalyzeInstDefUse(a.get()); + } module()->AddAnnotationInst(std::move(a)); } @@ -810,10 +944,10 @@ void IRContext::AddType(std::unique_ptr&& t) { } void IRContext::AddGlobalValue(std::unique_ptr&& v) { - module()->AddGlobalValue(std::move(v)); if (AreAnalysesValid(kAnalysisDefUse)) { - get_def_use_mgr()->AnalyzeInstDef(&*(--types_values_end())); + get_def_use_mgr()->AnalyzeInstDefUse(&*v); } + module()->AddGlobalValue(std::move(v)); } void IRContext::AddFunction(std::unique_ptr&& f) { diff --git a/3rdparty/spirv-tools/source/opt/licm_pass.cpp b/3rdparty/spirv-tools/source/opt/licm_pass.cpp index d8256679e..82851fd27 100644 --- a/3rdparty/spirv-tools/source/opt/licm_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/licm_pass.cpp @@ -23,70 +23,81 @@ namespace spvtools { namespace opt { -Pass::Status LICMPass::Process() { - return ProcessIRContext() ? Status::SuccessWithChange - : Status::SuccessWithoutChange; -} +Pass::Status LICMPass::Process() { return ProcessIRContext(); } -bool LICMPass::ProcessIRContext() { - bool modified = false; +Pass::Status LICMPass::ProcessIRContext() { + Status status = Status::SuccessWithoutChange; Module* module = get_module(); // Process each function in the module - for (Function& f : *module) { - modified |= ProcessFunction(&f); + for (auto func = module->begin(); + func != module->end() && status != Status::Failure; ++func) { + status = CombineStatus(status, ProcessFunction(&*func)); } - return modified; + return status; } -bool LICMPass::ProcessFunction(Function* f) { - bool modified = false; +Pass::Status LICMPass::ProcessFunction(Function* f) { + Status status = Status::SuccessWithoutChange; LoopDescriptor* loop_descriptor = context()->GetLoopDescriptor(f); // Process each loop in the function - for (Loop& loop : *loop_descriptor) { + for (auto it = loop_descriptor->begin(); + it != loop_descriptor->end() && status != Status::Failure; ++it) { + Loop& loop = *it; // Ignore nested loops, as we will process them in order in ProcessLoop if (loop.IsNested()) { continue; } - modified |= ProcessLoop(&loop, f); + status = CombineStatus(status, ProcessLoop(&loop, f)); } - return modified; + return status; } -bool LICMPass::ProcessLoop(Loop* loop, Function* f) { - bool modified = false; +Pass::Status LICMPass::ProcessLoop(Loop* loop, Function* f) { + Status status = Status::SuccessWithoutChange; // Process all nested loops first - for (Loop* nested_loop : *loop) { - modified |= ProcessLoop(nested_loop, f); + for (auto nl = loop->begin(); nl != loop->end() && status != Status::Failure; + ++nl) { + Loop* nested_loop = *nl; + status = CombineStatus(status, ProcessLoop(nested_loop, f)); } std::vector loop_bbs{}; - modified |= AnalyseAndHoistFromBB(loop, f, loop->GetHeaderBlock(), &loop_bbs); + status = CombineStatus( + status, + AnalyseAndHoistFromBB(loop, f, loop->GetHeaderBlock(), &loop_bbs)); - for (size_t i = 0; i < loop_bbs.size(); ++i) { + for (size_t i = 0; i < loop_bbs.size() && status != Status::Failure; ++i) { BasicBlock* bb = loop_bbs[i]; // do not delete the element - modified |= AnalyseAndHoistFromBB(loop, f, bb, &loop_bbs); + status = + CombineStatus(status, AnalyseAndHoistFromBB(loop, f, bb, &loop_bbs)); } - return modified; + return status; } -bool LICMPass::AnalyseAndHoistFromBB(Loop* loop, Function* f, BasicBlock* bb, - std::vector* loop_bbs) { +Pass::Status LICMPass::AnalyseAndHoistFromBB( + Loop* loop, Function* f, BasicBlock* bb, + std::vector* loop_bbs) { bool modified = false; - std::function hoist_inst = + std::function hoist_inst = [this, &loop, &modified](Instruction* inst) { if (loop->ShouldHoistInstruction(this->context(), inst)) { - HoistInstruction(loop, inst); + if (!HoistInstruction(loop, inst)) { + return false; + } modified = true; } + return true; }; if (IsImmediatelyContainedInLoop(loop, f, bb)) { - bb->ForEachInst(hoist_inst, false); + if (!bb->WhileEachInst(hoist_inst, false)) { + return Status::Failure; + } } DominatorAnalysis* dom_analysis = context()->GetDominatorAnalysis(f); @@ -98,7 +109,7 @@ bool LICMPass::AnalyseAndHoistFromBB(Loop* loop, Function* f, BasicBlock* bb, } } - return modified; + return (modified ? Status::SuccessWithChange : Status::SuccessWithoutChange); } bool LICMPass::IsImmediatelyContainedInLoop(Loop* loop, Function* f, @@ -107,10 +118,22 @@ bool LICMPass::IsImmediatelyContainedInLoop(Loop* loop, Function* f, return loop == (*loop_descriptor)[bb->id()]; } -void LICMPass::HoistInstruction(Loop* loop, Instruction* inst) { +bool LICMPass::HoistInstruction(Loop* loop, Instruction* inst) { + // TODO(1841): Handle failure to create pre-header. BasicBlock* pre_header_bb = loop->GetOrCreatePreHeaderBlock(); - inst->InsertBefore(std::move(&(*pre_header_bb->tail()))); + if (!pre_header_bb) { + return false; + } + Instruction* insertion_point = &*pre_header_bb->tail(); + Instruction* previous_node = insertion_point->PreviousNode(); + if (previous_node && (previous_node->opcode() == SpvOpLoopMerge || + previous_node->opcode() == SpvOpSelectionMerge)) { + insertion_point = previous_node; + } + + inst->InsertBefore(insertion_point); context()->set_instr_block(inst, pre_header_bb); + return true; } } // namespace opt diff --git a/3rdparty/spirv-tools/source/opt/licm_pass.h b/3rdparty/spirv-tools/source/opt/licm_pass.h index a17450043..597fe920a 100644 --- a/3rdparty/spirv-tools/source/opt/licm_pass.h +++ b/3rdparty/spirv-tools/source/opt/licm_pass.h @@ -35,30 +35,35 @@ class LICMPass : public Pass { private: // Searches the IRContext for functions and processes each, moving invariants - // outside loops within the function where possible - // Returns true if a change was made to a function within the IRContext - bool ProcessIRContext(); + // outside loops within the function where possible. + // Returns the status depending on whether or not there was a failure or + // change. + Pass::Status ProcessIRContext(); // Checks the function for loops, calling ProcessLoop on each one found. - // Returns true if a change was made to the function, false otherwise. - bool ProcessFunction(Function* f); + // Returns the status depending on whether or not there was a failure or + // change. + Pass::Status ProcessFunction(Function* f); // Checks for invariants in the loop and attempts to move them to the loops // preheader. Works from inner loop to outer when nested loops are found. - // Returns true if a change was made to the loop, false otherwise. - bool ProcessLoop(Loop* loop, Function* f); + // Returns the status depending on whether or not there was a failure or + // change. + Pass::Status ProcessLoop(Loop* loop, Function* f); // Analyses each instruction in |bb|, hoisting invariants to |pre_header_bb|. // Each child of |bb| wrt to |dom_tree| is pushed to |loop_bbs| - bool AnalyseAndHoistFromBB(Loop* loop, Function* f, BasicBlock* bb, - std::vector* loop_bbs); + // Returns the status depending on whether or not there was a failure or + // change. + Pass::Status AnalyseAndHoistFromBB(Loop* loop, Function* f, BasicBlock* bb, + std::vector* loop_bbs); // Returns true if |bb| is immediately contained in |loop| bool IsImmediatelyContainedInLoop(Loop* loop, Function* f, BasicBlock* bb); - // Move the instruction to the given BasicBlock + // Move the instruction to the preheader of |loop|. // This method will update the instruction to block mapping for the context - void HoistInstruction(Loop* loop, Instruction* inst); + bool HoistInstruction(Loop* loop, Instruction* inst); }; } // namespace opt diff --git a/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp b/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp index 5d00e98f7..5b976a11e 100644 --- a/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp @@ -292,7 +292,7 @@ Pass::Status LocalAccessChainConvertPass::ProcessImpl() { ProcessFunction pfn = [this](Function* fp) { return ConvertLocalAccessChains(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } @@ -339,6 +339,13 @@ void LocalAccessChainConvertPass::InitExtensions() { "SPV_GOOGLE_hlsl_functionality1", "SPV_NV_shader_subgroup_partitioned", "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_EXT_fragment_invocation_density", }); } diff --git a/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.h b/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.h index 9d06890bf..1c7e3d53b 100644 --- a/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.h +++ b/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.h @@ -44,7 +44,8 @@ class LocalAccessChainConvertPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse; + return IRContext::kAnalysisDefUse | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } using ProcessFunction = std::function; diff --git a/3rdparty/spirv-tools/source/opt/local_redundancy_elimination.h b/3rdparty/spirv-tools/source/opt/local_redundancy_elimination.h index 9f55c8bfe..770457a32 100644 --- a/3rdparty/spirv-tools/source/opt/local_redundancy_elimination.h +++ b/3rdparty/spirv-tools/source/opt/local_redundancy_elimination.h @@ -41,7 +41,8 @@ class LocalRedundancyEliminationPass : public Pass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } protected: diff --git a/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp index bb909f4aa..9330ab7ac 100644 --- a/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp @@ -200,7 +200,7 @@ Pass::Status LocalSingleBlockLoadStoreElimPass::ProcessImpl() { return LocalSingleBlockLoadStoreElim(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } @@ -248,6 +248,13 @@ void LocalSingleBlockLoadStoreElimPass::InitExtensions() { "SPV_GOOGLE_hlsl_functionality1", "SPV_NV_shader_subgroup_partitioned", "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_EXT_fragment_invocation_density", }); } diff --git a/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.h b/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.h index 3dead9834..0fe7732a8 100644 --- a/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.h +++ b/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.h @@ -42,7 +42,9 @@ class LocalSingleBlockLoadStoreElimPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping; + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp index 4c837fc73..6c09deced 100644 --- a/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp @@ -67,7 +67,7 @@ Pass::Status LocalSingleStoreElimPass::ProcessImpl() { ProcessFunction pfn = [this](Function* fp) { return LocalSingleStoreElim(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } @@ -113,6 +113,13 @@ void LocalSingleStoreElimPass::InitExtensionWhiteList() { "SPV_GOOGLE_hlsl_functionality1", "SPV_NV_shader_subgroup_partitioned", "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_EXT_fragment_invocation_density", }); } bool LocalSingleStoreElimPass::ProcessVariable(Instruction* var_inst) { diff --git a/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.h b/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.h index d3d64b829..4cf8bbb86 100644 --- a/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.h +++ b/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.h @@ -45,7 +45,9 @@ class LocalSingleStoreElimPass : public Pass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping; + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.cpp b/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.cpp index ec7326ed0..8209aa405 100644 --- a/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.cpp @@ -50,7 +50,7 @@ Pass::Status LocalMultiStoreElimPass::ProcessImpl() { ProcessFunction pfn = [this](Function* fp) { return SSARewriter(this).RewriteFunctionIntoSSA(fp); }; - bool modified = ProcessEntryPointCallTree(pfn, get_module()); + bool modified = context()->ProcessEntryPointCallTree(pfn); return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } @@ -98,6 +98,13 @@ void LocalMultiStoreElimPass::InitExtensions() { "SPV_GOOGLE_hlsl_functionality1", "SPV_NV_shader_subgroup_partitioned", "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_EXT_fragment_invocation_density", }); } diff --git a/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.h b/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.h index 63d3c33ba..de80d5a86 100644 --- a/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.h +++ b/3rdparty/spirv-tools/source/opt/local_ssa_elim_pass.h @@ -48,7 +48,9 @@ class LocalMultiStoreElimPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping; + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/loop_descriptor.cpp b/3rdparty/spirv-tools/source/opt/loop_descriptor.cpp index efc56bdba..5aff34ce7 100644 --- a/3rdparty/spirv-tools/source/opt/loop_descriptor.cpp +++ b/3rdparty/spirv-tools/source/opt/loop_descriptor.cpp @@ -914,6 +914,7 @@ bool LoopDescriptor::CreatePreHeaderBlocksIfMissing() { for (auto& loop : *this) { if (!loop.GetPreHeaderBlock()) { modified = true; + // TODO(1841): Handle failure to create pre-header. loop.GetOrCreatePreHeaderBlock(); } } diff --git a/3rdparty/spirv-tools/source/opt/loop_descriptor.h b/3rdparty/spirv-tools/source/opt/loop_descriptor.h index 45a175a0c..38f017b5f 100644 --- a/3rdparty/spirv-tools/source/opt/loop_descriptor.h +++ b/3rdparty/spirv-tools/source/opt/loop_descriptor.h @@ -132,7 +132,7 @@ class Loop { void SetPreHeaderBlock(BasicBlock* preheader); // Returns the loop pre-header, if there is no suitable preheader it will be - // created. + // created. Returns |nullptr| if it fails to create the preheader. BasicBlock* GetOrCreatePreHeaderBlock(); // Returns true if this loop contains any nested loops. diff --git a/3rdparty/spirv-tools/source/opt/loop_fission.cpp b/3rdparty/spirv-tools/source/opt/loop_fission.cpp index 0052406dd..0678113c4 100644 --- a/3rdparty/spirv-tools/source/opt/loop_fission.cpp +++ b/3rdparty/spirv-tools/source/opt/loop_fission.cpp @@ -367,6 +367,7 @@ Loop* LoopFissionImpl::SplitLoop() { cloned_loop->UpdateLoopMergeInst(); // Add the loop_ to the module. + // TODO(1841): Handle failure to create pre-header. Function::iterator it = util.GetFunction()->FindBlock(loop_->GetOrCreatePreHeaderBlock()->id()); util.GetFunction()->AddBasicBlocks(clone_results.cloned_bb_.begin(), diff --git a/3rdparty/spirv-tools/source/opt/loop_peeling.cpp b/3rdparty/spirv-tools/source/opt/loop_peeling.cpp index 7d27480ae..b640542d3 100644 --- a/3rdparty/spirv-tools/source/opt/loop_peeling.cpp +++ b/3rdparty/spirv-tools/source/opt/loop_peeling.cpp @@ -39,6 +39,7 @@ void LoopPeeling::DuplicateAndConnectLoop( assert(CanPeelLoop() && "Cannot peel loop!"); std::vector ordered_loop_blocks; + // TODO(1841): Handle failure to create pre-header. BasicBlock* pre_header = loop_->GetOrCreatePreHeaderBlock(); loop_->ComputeLoopStructuredOrder(&ordered_loop_blocks); @@ -131,6 +132,7 @@ void LoopPeeling::DuplicateAndConnectLoop( // Force the creation of a new preheader for the original loop and set it as // the merge block for the cloned loop. + // TODO(1841): Handle failure to create pre-header. cloned_loop_->SetMergeBlock(loop_->GetOrCreatePreHeaderBlock()); } @@ -151,7 +153,7 @@ void LoopPeeling::InsertCanonicalInductionVariable( context_, &*insert_point, IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); Instruction* uint_1_cst = - builder.Add32BitConstantInteger(1, int_type_->IsSigned()); + builder.GetIntConstant(1, int_type_->IsSigned()); // Create the increment. // Note that we do "1 + 1" here, one of the operand should the phi // value but we don't have it yet. The operand will be set latter. @@ -162,8 +164,7 @@ void LoopPeeling::InsertCanonicalInductionVariable( canonical_induction_variable_ = builder.AddPhi( uint_1_cst->type_id(), - {builder.Add32BitConstantInteger(0, int_type_->IsSigned()) - ->result_id(), + {builder.GetIntConstant(0, int_type_->IsSigned())->result_id(), GetClonedLoop()->GetPreHeaderBlock()->id(), iv_inc->result_id(), GetClonedLoop()->GetLatchBlock()->id()}); // Connect everything. @@ -346,6 +347,7 @@ BasicBlock* LoopPeeling::CreateBlockBefore(BasicBlock* bb) { CFG& cfg = *context_->cfg(); assert(cfg.preds(bb->id()).size() == 1 && "More than one predecessor"); + // TODO(1841): Handle id overflow. std::unique_ptr new_bb = MakeUnique(std::unique_ptr(new Instruction( context_, SpvOpLabel, 0, context_->TakeNextId(), {}))); @@ -392,6 +394,7 @@ BasicBlock* LoopPeeling::CreateBlockBefore(BasicBlock* bb) { BasicBlock* LoopPeeling::ProtectLoop(Loop* loop, Instruction* condition, BasicBlock* if_merge) { + // TODO(1841): Handle failure to create pre-header. BasicBlock* if_block = loop->GetOrCreatePreHeaderBlock(); // Will no longer be a pre-header because of the if. loop->SetPreHeaderBlock(nullptr); @@ -422,7 +425,7 @@ void LoopPeeling::PeelBefore(uint32_t peel_factor) { context_, &*cloned_loop_->GetPreHeaderBlock()->tail(), IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); Instruction* factor = - builder.Add32BitConstantInteger(peel_factor, int_type_->IsSigned()); + builder.GetIntConstant(peel_factor, int_type_->IsSigned()); Instruction* has_remaining_iteration = builder.AddLessThan( factor->result_id(), loop_iteration_count_->result_id()); @@ -484,7 +487,7 @@ void LoopPeeling::PeelAfter(uint32_t peel_factor) { context_, &*cloned_loop_->GetPreHeaderBlock()->tail(), IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); Instruction* factor = - builder.Add32BitConstantInteger(peel_factor, int_type_->IsSigned()); + builder.GetIntConstant(peel_factor, int_type_->IsSigned()); Instruction* has_remaining_iteration = builder.AddLessThan( factor->result_id(), loop_iteration_count_->result_id()); @@ -677,8 +680,8 @@ std::pair LoopPeelingPass::ProcessLoop(Loop* loop, InstructionBuilder( context(), loop->GetHeaderBlock(), IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping) - .Add32BitConstantInteger(static_cast(iterations), - is_signed), + .GetIntConstant(static_cast(iterations), + is_signed), canonical_induction_variable); if (!peeler.CanPeelLoop()) { diff --git a/3rdparty/spirv-tools/source/opt/loop_unroller.cpp b/3rdparty/spirv-tools/source/opt/loop_unroller.cpp index 587615edf..0d49d881b 100644 --- a/3rdparty/spirv-tools/source/opt/loop_unroller.cpp +++ b/3rdparty/spirv-tools/source/opt/loop_unroller.cpp @@ -244,6 +244,10 @@ class LoopUnrollerUtilsImpl { // ect). void AssignNewResultIds(BasicBlock* basic_block); + // Using the map built by AssignNewResultIds, replace the uses in |inst| + // by the id that the use maps to. + void RemapOperands(Instruction* inst); + // Using the map built by AssignNewResultIds, for each instruction in // |basic_block| use // that map to substitute the IDs used by instructions (in the operands) with @@ -373,6 +377,7 @@ void LoopUnrollerUtilsImpl::Init(Loop* loop) { // number of bodies. void LoopUnrollerUtilsImpl::PartiallyUnrollResidualFactor(Loop* loop, size_t factor) { + // TODO(1841): Handle id overflow. std::unique_ptr new_label{new Instruction( context_, SpvOp::SpvOpLabel, 0, context_->TakeNextId(), {})}; std::unique_ptr new_exit_bb{new BasicBlock(std::move(new_label))}; @@ -448,11 +453,9 @@ void LoopUnrollerUtilsImpl::PartiallyUnrollResidualFactor(Loop* loop, // If the remainder is negative then we add a signed constant, otherwise just // add an unsigned constant. if (remainder < 0) { - new_constant = - builder.Add32BitSignedIntegerConstant(static_cast(remainder)); + new_constant = builder.GetSintConstant(static_cast(remainder)); } else { - new_constant = builder.Add32BitUnsignedIntegerConstant( - static_cast(remainder)); + new_constant = builder.GetUintConstant(static_cast(remainder)); } uint32_t constant_id = new_constant->result_id(); @@ -547,7 +550,10 @@ void LoopUnrollerUtilsImpl::RemoveDeadInstructions() { void LoopUnrollerUtilsImpl::ReplaceInductionUseWithFinalValue(Loop* loop) { context_->InvalidateAnalysesExceptFor( - IRContext::Analysis::kAnalysisLoopAnalysis); + IRContext::Analysis::kAnalysisLoopAnalysis | + IRContext::Analysis::kAnalysisDefUse | + IRContext::Analysis::kAnalysisInstrToBlockMapping); + std::vector inductions; loop->GetInductionVariables(inductions); @@ -588,7 +594,8 @@ void LoopUnrollerUtilsImpl::FullyUnroll(Loop* loop) { RemoveDeadInstructions(); // Invalidate all analyses. context_->InvalidateAnalysesExceptFor( - IRContext::Analysis::kAnalysisLoopAnalysis); + IRContext::Analysis::kAnalysisLoopAnalysis | + IRContext::Analysis::kAnalysisDefUse); } // Copy a given basic block, give it a new result_id, and store the new block @@ -611,6 +618,7 @@ void LoopUnrollerUtilsImpl::CopyBasicBlock(Loop* loop, const BasicBlock* itr, if (!preserve_instructions) { Instruction* merge_inst = loop->GetHeaderBlock()->GetLoopMergeInst(); merge_inst->SetInOperand(1, {basic_block->id()}); + context_->UpdateDefUse(merge_inst); } state_.new_continue_block = basic_block; @@ -651,15 +659,17 @@ void LoopUnrollerUtilsImpl::CopyBody(Loop* loop, bool eliminate_conditions) { } // Set the previous latch block to point to the new header. - Instruction& latch_branch = *state_.previous_latch_block_->tail(); - latch_branch.SetInOperand(0, {state_.new_header_block->id()}); + Instruction* latch_branch = state_.previous_latch_block_->terminator(); + latch_branch->SetInOperand(0, {state_.new_header_block->id()}); + context_->UpdateDefUse(latch_branch); // As the algorithm copies the original loop blocks exactly, the tail of the // latch block on iterations after the first one will be a branch to the new // header and not the actual loop header. The last continue block in the loop // should always be a backedge to the global header. - Instruction& new_latch_branch = *state_.new_latch_block->tail(); - new_latch_branch.SetInOperand(0, {loop->GetHeaderBlock()->id()}); + Instruction* new_latch_branch = state_.new_latch_block->terminator(); + new_latch_branch->SetInOperand(0, {loop->GetHeaderBlock()->id()}); + context_->AnalyzeUses(new_latch_branch); std::vector inductions; loop->GetInductionVariables(inductions); @@ -721,7 +731,10 @@ void LoopUnrollerUtilsImpl::FoldConditionBlock(BasicBlock* condition_block, context_->KillInst(&old_branch); // Add the new unconditional branch to the merge block. - InstructionBuilder builder{context_, condition_block}; + InstructionBuilder builder( + context_, condition_block, + IRContext::Analysis::kAnalysisDefUse | + IRContext::Analysis::kAnalysisInstrToBlockMapping); builder.AddBranch(new_target); } @@ -732,8 +745,9 @@ void LoopUnrollerUtilsImpl::CloseUnrolledLoop(Loop* loop) { // Remove the final backedge to the header and make it point instead to the // merge block. - state_.previous_latch_block_->tail()->SetInOperand( - 0, {loop->GetMergeBlock()->id()}); + Instruction* latch_instruction = state_.previous_latch_block_->terminator(); + latch_instruction->SetInOperand(0, {loop->GetMergeBlock()->id()}); + context_->UpdateDefUse(latch_instruction); // Remove all induction variables as the phis will now be invalid. Replace all // uses with the constant initializer value (all uses of phis will be in @@ -757,6 +771,11 @@ void LoopUnrollerUtilsImpl::CloseUnrolledLoop(Loop* loop) { for (BasicBlock* block : loop_blocks_inorder_) { RemapOperands(block); } + + // Rewrite the last phis, since they may still reference the original phi. + for (Instruction* last_phi : state_.previous_phis_) { + RemapOperands(last_phi); + } } // Uses the first loop to create a copy of the loop with new IDs. @@ -812,13 +831,17 @@ void LoopUnrollerUtilsImpl::AddBlocksToFunction( // Assign all result_ids in |basic_block| instructions to new IDs and preserve // the mapping of new ids to old ones. void LoopUnrollerUtilsImpl::AssignNewResultIds(BasicBlock* basic_block) { + analysis::DefUseManager* def_use_mgr = context_->get_def_use_mgr(); + // Label instructions aren't covered by normal traversal of the // instructions. + // TODO(1841): Handle id overflow. uint32_t new_label_id = context_->TakeNextId(); // Assign a new id to the label. state_.new_inst[basic_block->GetLabelInst()->result_id()] = new_label_id; basic_block->GetLabelInst()->SetResultId(new_label_id); + def_use_mgr->AnalyzeInstDefUse(basic_block->GetLabelInst()); for (Instruction& inst : *basic_block) { uint32_t old_id = inst.result_id(); @@ -829,7 +852,9 @@ void LoopUnrollerUtilsImpl::AssignNewResultIds(BasicBlock* basic_block) { } // Give the instruction a new id. + // TODO(1841): Handle id overflow. inst.SetResultId(context_->TakeNextId()); + def_use_mgr->AnalyzeInstDef(&inst); // Save the mapping of old_id -> new_id. state_.new_inst[old_id] = inst.result_id(); @@ -842,19 +867,22 @@ void LoopUnrollerUtilsImpl::AssignNewResultIds(BasicBlock* basic_block) { } } -// For all instructions in |basic_block| check if the operands used are from a -// copied instruction and if so swap out the operand for the copy of it. +void LoopUnrollerUtilsImpl::RemapOperands(Instruction* inst) { + auto remap_operands_to_new_ids = [this](uint32_t* id) { + auto itr = state_.new_inst.find(*id); + + if (itr != state_.new_inst.end()) { + *id = itr->second; + } + }; + + inst->ForEachInId(remap_operands_to_new_ids); + context_->AnalyzeUses(inst); +} + void LoopUnrollerUtilsImpl::RemapOperands(BasicBlock* basic_block) { for (Instruction& inst : *basic_block) { - auto remap_operands_to_new_ids = [this](uint32_t* id) { - auto itr = state_.new_inst.find(*id); - - if (itr != state_.new_inst.end()) { - *id = itr->second; - } - }; - - inst.ForEachInId(remap_operands_to_new_ids); + RemapOperands(&inst); } } diff --git a/3rdparty/spirv-tools/source/opt/loop_unroller.h b/3rdparty/spirv-tools/source/opt/loop_unroller.h index eb358ae24..71e7cca31 100644 --- a/3rdparty/spirv-tools/source/opt/loop_unroller.h +++ b/3rdparty/spirv-tools/source/opt/loop_unroller.h @@ -30,6 +30,14 @@ class LoopUnroller : public Pass { Status Process() override; + IRContext::Analysis GetPreservedAnalyses() override { + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; + } + private: bool fully_unroll_; int unroll_factor_; diff --git a/3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp b/3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp index 59a0cbcd3..502fc6b68 100644 --- a/3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp @@ -39,8 +39,6 @@ namespace opt { namespace { static const uint32_t kTypePointerStorageClassInIdx = 0; -static const uint32_t kBranchCondTrueLabIdInIdx = 1; -static const uint32_t kBranchCondFalseLabIdInIdx = 2; } // anonymous namespace @@ -74,9 +72,13 @@ class LoopUnswitch { for (uint32_t bb_id : loop_->GetBlocks()) { BasicBlock* bb = cfg.block(bb_id); + if (loop_->GetLatchBlock() == bb) { + continue; + } + if (bb->terminator()->IsBranch() && bb->terminator()->opcode() != SpvOpBranch) { - if (IsConditionLoopInvariant(bb->terminator())) { + if (IsConditionNonConstantLoopInvariant(bb->terminator())) { switch_block_ = bb; break; } @@ -99,6 +101,7 @@ class LoopUnswitch { BasicBlock* CreateBasicBlock(Function::iterator ip) { analysis::DefUseManager* def_use_mgr = context_->get_def_use_mgr(); + // TODO(1841): Handle id overflow. BasicBlock* bb = &*ip.InsertBefore(std::unique_ptr( new BasicBlock(std::unique_ptr(new Instruction( context_, SpvOpLabel, 0, context_->TakeNextId(), {}))))); @@ -109,6 +112,35 @@ class LoopUnswitch { return bb; } + Instruction* GetValueForDefaultPathForSwitch(Instruction* switch_inst) { + assert(switch_inst->opcode() == SpvOpSwitch && + "The given instructoin must be an OpSwitch."); + + // Find a value that can be used to select the default path. + // If none are possible, then it will just use 0. The value does not matter + // because this path will never be taken becaues the new switch outside of + // the loop cannot select this path either. + std::vector existing_values; + for (uint32_t i = 2; i < switch_inst->NumInOperands(); i += 2) { + existing_values.push_back(switch_inst->GetSingleWordInOperand(i)); + } + std::sort(existing_values.begin(), existing_values.end()); + uint32_t value_for_default_path = 0; + if (existing_values.size() < std::numeric_limits::max()) { + for (value_for_default_path = 0; + value_for_default_path < existing_values.size(); + value_for_default_path++) { + if (existing_values[value_for_default_path] != value_for_default_path) { + break; + } + } + } + InstructionBuilder builder( + context_, static_cast(nullptr), + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); + return builder.GetUintConstant(value_for_default_path); + } + // Unswitches |loop_|. void PerformUnswitch() { assert(CanUnswitchLoop() && @@ -153,6 +185,7 @@ class LoopUnswitch { if_merge_block->ForEachPhiInst( [loop_merge_block, &builder, this](Instruction* phi) { Instruction* cloned = phi->Clone(context_); + cloned->SetResultId(TakeNextId()); builder.AddInstruction(std::unique_ptr(cloned)); phi->SetInOperand(0, {cloned->result_id()}); phi->SetInOperand(1, {loop_merge_block->id()}); @@ -176,7 +209,6 @@ class LoopUnswitch { ploop->AddBasicBlock(loop_merge_block); loop_desc_.SetBasicBlockToLoop(loop_merge_block->id(), ploop); } - // Update the dominator tree. DominatorTreeNode* loop_merge_dtn = dom_tree->GetOrInsertNode(loop_merge_block); @@ -194,7 +226,7 @@ class LoopUnswitch { //////////////////////////////////////////////////////////////////////////// // Step 2: Build a new preheader for |loop_|, use the old one - // for the constant branch. + // for the invariant branch. //////////////////////////////////////////////////////////////////////////// BasicBlock* if_block = loop_->GetPreHeaderBlock(); @@ -272,7 +304,6 @@ class LoopUnswitch { std::vector> constant_branch; // Special case for the original loop Instruction* original_loop_constant_value; - BasicBlock* original_loop_target; if (iv_opcode == SpvOpBranchConditional) { constant_branch.emplace_back( cst_mgr->GetDefiningInstruction(cst_mgr->GetConstant(cond_type, {0})), @@ -282,7 +313,9 @@ class LoopUnswitch { } else { // We are looking to take the default branch, so we can't provide a // specific value. - original_loop_constant_value = nullptr; + original_loop_constant_value = + GetValueForDefaultPathForSwitch(iv_condition); + for (uint32_t i = 2; i < iv_condition->NumInOperands(); i += 2) { constant_branch.emplace_back( cst_mgr->GetDefiningInstruction(cst_mgr->GetConstant( @@ -322,24 +355,7 @@ class LoopUnswitch { //////////////////////////////////// { - std::unordered_set dead_blocks; - std::unordered_set unreachable_merges; - SimplifyLoop( - make_range( - UptrVectorIterator(&clone_result.cloned_bb_, - clone_result.cloned_bb_.begin()), - UptrVectorIterator(&clone_result.cloned_bb_, - clone_result.cloned_bb_.end())), - cloned_loop, condition, specialisation_value, &dead_blocks); - - // We tagged dead blocks, create the loop before we invalidate any basic - // block. - cloned_loop = - CleanLoopNest(cloned_loop, dead_blocks, &unreachable_merges); - CleanUpCFG( - UptrVectorIterator(&clone_result.cloned_bb_, - clone_result.cloned_bb_.begin()), - dead_blocks, unreachable_merges); + SpecializeLoop(cloned_loop, condition, specialisation_value); /////////////////////////////////////////////////////////// // Step 5: Connect convergent edges to the landing pads. // @@ -348,27 +364,25 @@ class LoopUnswitch { for (uint32_t merge_bb_id : if_merging_blocks) { BasicBlock* merge = context_->cfg()->block(merge_bb_id); // We are in LCSSA so we only care about phi instructions. - merge->ForEachPhiInst([is_from_original_loop, &dead_blocks, - &clone_result](Instruction* phi) { - uint32_t num_in_operands = phi->NumInOperands(); - for (uint32_t i = 0; i < num_in_operands; i += 2) { - uint32_t pred = phi->GetSingleWordInOperand(i + 1); - if (is_from_original_loop(pred)) { - pred = clone_result.value_map_.at(pred); - if (!dead_blocks.count(pred)) { - uint32_t incoming_value_id = phi->GetSingleWordInOperand(i); - // Not all the incoming value are coming from the loop. - ValueMapTy::iterator new_value = - clone_result.value_map_.find(incoming_value_id); - if (new_value != clone_result.value_map_.end()) { - incoming_value_id = new_value->second; + merge->ForEachPhiInst( + [is_from_original_loop, &clone_result](Instruction* phi) { + uint32_t num_in_operands = phi->NumInOperands(); + for (uint32_t i = 0; i < num_in_operands; i += 2) { + uint32_t pred = phi->GetSingleWordInOperand(i + 1); + if (is_from_original_loop(pred)) { + pred = clone_result.value_map_.at(pred); + uint32_t incoming_value_id = phi->GetSingleWordInOperand(i); + // Not all the incoming values are coming from the loop. + ValueMapTy::iterator new_value = + clone_result.value_map_.find(incoming_value_id); + if (new_value != clone_result.value_map_.end()) { + incoming_value_id = new_value->second; + } + phi->AddOperand({SPV_OPERAND_TYPE_ID, {incoming_value_id}}); + phi->AddOperand({SPV_OPERAND_TYPE_ID, {pred}}); } - phi->AddOperand({SPV_OPERAND_TYPE_ID, {incoming_value_id}}); - phi->AddOperand({SPV_OPERAND_TYPE_ID, {pred}}); } - } - } - }); + }); } } function_->AddBasicBlocks(clone_result.cloned_bb_.begin(), @@ -376,38 +390,9 @@ class LoopUnswitch { ++FindBasicBlockPosition(if_block)); } - // Same as above but specialize the existing loop - { - std::unordered_set dead_blocks; - std::unordered_set unreachable_merges; - SimplifyLoop(make_range(function_->begin(), function_->end()), loop_, - condition, original_loop_constant_value, &dead_blocks); - - for (uint32_t merge_bb_id : if_merging_blocks) { - BasicBlock* merge = context_->cfg()->block(merge_bb_id); - // LCSSA, so we only care about phi instructions. - // If we the phi is reduced to a single incoming branch, do not - // propagate it to preserve LCSSA. - PatchPhis(merge, dead_blocks, true); - } - if (if_merge_block) { - bool has_live_pred = false; - for (uint32_t pid : cfg.preds(if_merge_block->id())) { - if (!dead_blocks.count(pid)) { - has_live_pred = true; - break; - } - } - if (!has_live_pred) unreachable_merges.insert(if_merge_block->id()); - } - original_loop_target = loop_->GetPreHeaderBlock(); - // We tagged dead blocks, prune the loop descriptor from any dead loops. - // After this call, |loop_| can be nullptr (i.e. the unswitch killed this - // loop). - loop_ = CleanLoopNest(loop_, dead_blocks, &unreachable_merges); - - CleanUpCFG(function_->begin(), dead_blocks, unreachable_merges); - } + // Specialize the existing loop. + SpecializeLoop(loop_, condition, original_loop_constant_value); + BasicBlock* original_loop_target = loop_->GetPreHeaderBlock(); ///////////////////////////////////// // Finally: connect the new loops. // @@ -440,9 +425,6 @@ class LoopUnswitch { IRContext::Analysis::kAnalysisLoopAnalysis); } - // Returns true if the unswitch killed the original |loop_|. - bool WasLoopKilled() const { return loop_ == nullptr; } - private: using ValueMapTy = std::unordered_map; using BlockMapTy = std::unordered_map; @@ -459,96 +441,9 @@ class LoopUnswitch { std::vector ordered_loop_blocks_; // Returns the next usable id for the context. - uint32_t TakeNextId() { return context_->TakeNextId(); } - - // Patches |bb|'s phi instruction by removing incoming value from unexisting - // or tagged as dead branches. - void PatchPhis(BasicBlock* bb, - const std::unordered_set& dead_blocks, - bool preserve_phi) { - CFG& cfg = *context_->cfg(); - - std::vector phi_to_kill; - const std::vector& bb_preds = cfg.preds(bb->id()); - auto is_branch_dead = [&bb_preds, &dead_blocks](uint32_t id) { - return dead_blocks.count(id) || - std::find(bb_preds.begin(), bb_preds.end(), id) == bb_preds.end(); - }; - bb->ForEachPhiInst([&phi_to_kill, &is_branch_dead, preserve_phi, - this](Instruction* insn) { - uint32_t i = 0; - while (i < insn->NumInOperands()) { - uint32_t incoming_id = insn->GetSingleWordInOperand(i + 1); - if (is_branch_dead(incoming_id)) { - // Remove the incoming block id operand. - insn->RemoveInOperand(i + 1); - // Remove the definition id operand. - insn->RemoveInOperand(i); - continue; - } - i += 2; - } - // If there is only 1 remaining edge, propagate the value and - // kill the instruction. - if (insn->NumInOperands() == 2 && !preserve_phi) { - phi_to_kill.push_back(insn); - context_->ReplaceAllUsesWith(insn->result_id(), - insn->GetSingleWordInOperand(0)); - } - }); - for (Instruction* insn : phi_to_kill) { - context_->KillInst(insn); - } - } - - // Removes any block that is tagged as dead, if the block is in - // |unreachable_merges| then all block's instructions are replaced by a - // OpUnreachable. - void CleanUpCFG(UptrVectorIterator bb_it, - const std::unordered_set& dead_blocks, - const std::unordered_set& unreachable_merges) { - CFG& cfg = *context_->cfg(); - - while (bb_it != bb_it.End()) { - BasicBlock& bb = *bb_it; - - if (unreachable_merges.count(bb.id())) { - if (bb.begin() != bb.tail() || - bb.terminator()->opcode() != SpvOpUnreachable) { - // Make unreachable, but leave the label. - bb.KillAllInsts(false); - InstructionBuilder(context_, &bb).AddUnreachable(); - cfg.RemoveNonExistingEdges(bb.id()); - } - ++bb_it; - } else if (dead_blocks.count(bb.id())) { - cfg.ForgetBlock(&bb); - // Kill this block. - bb.KillAllInsts(true); - bb_it = bb_it.Erase(); - } else { - cfg.RemoveNonExistingEdges(bb.id()); - ++bb_it; - } - } - } - - // Return true if |c_inst| is a Boolean constant and set |cond_val| with the - // value that |c_inst| - bool GetConstCondition(const Instruction* c_inst, bool* cond_val) { - bool cond_is_const; - switch (c_inst->opcode()) { - case SpvOpConstantFalse: { - *cond_val = false; - cond_is_const = true; - } break; - case SpvOpConstantTrue: { - *cond_val = true; - cond_is_const = true; - } break; - default: { cond_is_const = false; } break; - } - return cond_is_const; + uint32_t TakeNextId() { + // TODO(1841): Handle id overflow. + return context_->TakeNextId(); } // Simplifies |loop| assuming the instruction |to_version_insn| takes the @@ -560,13 +455,9 @@ class LoopUnswitch { // // Requirements: // - |loop| must be in the LCSSA form; - // - |cst_value| must be constant or null (to represent the default target - // of an OpSwitch). - void SimplifyLoop(IteratorRange> block_range, - Loop* loop, Instruction* to_version_insn, - Instruction* cst_value, - std::unordered_set* dead_blocks) { - CFG& cfg = *context_->cfg(); + // - |cst_value| must be constant. + void SpecializeLoop(Loop* loop, Instruction* to_version_insn, + Instruction* cst_value) { analysis::DefUseManager* def_use_mgr = context_->get_def_use_mgr(); std::function ignore_node; @@ -591,192 +482,15 @@ class LoopUnswitch { for (auto use : use_list) { Instruction* inst = use.first; uint32_t operand_index = use.second; - BasicBlock* bb = context_->get_instr_block(inst); - // If it is not a branch, simply inject the value. - if (!inst->IsBranch()) { - // To also handle switch, cst_value can be nullptr: this case - // means that we are looking to branch to the default target of - // the switch. We don't actually know its value so we don't touch - // it if it not a switch. - if (cst_value) { - inst->SetOperand(operand_index, {cst_value->result_id()}); - def_use_mgr->AnalyzeInstUse(inst); - } - } - - // The user is a branch, kill dead branches. - uint32_t live_target = 0; - std::unordered_set dead_branches; - switch (inst->opcode()) { - case SpvOpBranchConditional: { - assert(cst_value && "No constant value to specialize !"); - bool branch_cond = false; - if (GetConstCondition(cst_value, &branch_cond)) { - uint32_t true_label = - inst->GetSingleWordInOperand(kBranchCondTrueLabIdInIdx); - uint32_t false_label = - inst->GetSingleWordInOperand(kBranchCondFalseLabIdInIdx); - live_target = branch_cond ? true_label : false_label; - uint32_t dead_target = !branch_cond ? true_label : false_label; - cfg.RemoveEdge(bb->id(), dead_target); - } - break; - } - case SpvOpSwitch: { - live_target = inst->GetSingleWordInOperand(1); - if (cst_value) { - if (!cst_value->IsConstant()) break; - const Operand& cst = cst_value->GetInOperand(0); - for (uint32_t i = 2; i < inst->NumInOperands(); i += 2) { - const Operand& literal = inst->GetInOperand(i); - if (literal == cst) { - live_target = inst->GetSingleWordInOperand(i + 1); - break; - } - } - } - for (uint32_t i = 1; i < inst->NumInOperands(); i += 2) { - uint32_t id = inst->GetSingleWordInOperand(i); - if (id != live_target) { - cfg.RemoveEdge(bb->id(), id); - } - } - } - default: - break; - } - if (live_target != 0) { - // Check for the presence of the merge block. - if (Instruction* merge = bb->GetMergeInst()) context_->KillInst(merge); - context_->KillInst(&*bb->tail()); - InstructionBuilder builder(context_, bb, - IRContext::kAnalysisDefUse | - IRContext::kAnalysisInstrToBlockMapping); - builder.AddBranch(live_target); - } + // To also handle switch, cst_value can be nullptr: this case + // means that we are looking to branch to the default target of + // the switch. We don't actually know its value so we don't touch + // it if it not a switch. + assert(cst_value && "We do not have a value to use."); + inst->SetOperand(operand_index, {cst_value->result_id()}); + def_use_mgr->AnalyzeInstUse(inst); } - - // Go through the loop basic block and tag all blocks that are obviously - // dead. - std::unordered_set visited; - for (BasicBlock& bb : block_range) { - if (ignore_node(bb.id())) continue; - visited.insert(bb.id()); - - // Check if this block is dead, if so tag it as dead otherwise patch phi - // instructions. - bool has_live_pred = false; - for (uint32_t pid : cfg.preds(bb.id())) { - if (!dead_blocks->count(pid)) { - has_live_pred = true; - break; - } - } - if (!has_live_pred) { - dead_blocks->insert(bb.id()); - const BasicBlock& cbb = bb; - // Patch the phis for any back-edge. - cbb.ForEachSuccessorLabel( - [dead_blocks, &visited, &cfg, this](uint32_t id) { - if (!visited.count(id) || dead_blocks->count(id)) return; - BasicBlock* succ = cfg.block(id); - PatchPhis(succ, *dead_blocks, false); - }); - continue; - } - // Update the phi instructions, some incoming branch have/will disappear. - PatchPhis(&bb, *dead_blocks, /* preserve_phi = */ false); - } - } - - // Returns true if the header is not reachable or tagged as dead or if we - // never loop back. - bool IsLoopDead(BasicBlock* header, BasicBlock* latch, - const std::unordered_set& dead_blocks) { - if (!header || dead_blocks.count(header->id())) return true; - if (!latch || dead_blocks.count(latch->id())) return true; - for (uint32_t pid : context_->cfg()->preds(header->id())) { - if (!dead_blocks.count(pid)) { - // Seems reachable. - return false; - } - } - return true; - } - - // Cleans the loop nest under |loop| and reflect changes to the loop - // descriptor. This will kill all descriptors that represent dead loops. - // If |loop_| is killed, it will be set to nullptr. - // Any merge blocks that become unreachable will be added to - // |unreachable_merges|. - // The function returns the pointer to |loop| or nullptr if the loop was - // killed. - Loop* CleanLoopNest(Loop* loop, - const std::unordered_set& dead_blocks, - std::unordered_set* unreachable_merges) { - // This represent the pair of dead loop and nearest alive parent (nullptr if - // no parent). - std::unordered_map dead_loops; - auto get_parent = [&dead_loops](Loop* l) -> Loop* { - std::unordered_map::iterator it = dead_loops.find(l); - if (it != dead_loops.end()) return it->second; - return nullptr; - }; - - bool is_main_loop_dead = - IsLoopDead(loop->GetHeaderBlock(), loop->GetLatchBlock(), dead_blocks); - if (is_main_loop_dead) { - if (Instruction* merge = loop->GetHeaderBlock()->GetLoopMergeInst()) { - context_->KillInst(merge); - } - dead_loops[loop] = loop->GetParent(); - } else { - dead_loops[loop] = loop; - } - - // For each loop, check if we killed it. If we did, find a suitable parent - // for its children. - for (Loop& sub_loop : - make_range(++TreeDFIterator(loop), TreeDFIterator())) { - if (IsLoopDead(sub_loop.GetHeaderBlock(), sub_loop.GetLatchBlock(), - dead_blocks)) { - if (Instruction* merge = - sub_loop.GetHeaderBlock()->GetLoopMergeInst()) { - context_->KillInst(merge); - } - dead_loops[&sub_loop] = get_parent(&sub_loop); - } else { - // The loop is alive, check if its merge block is dead, if it is, tag it - // as required. - if (sub_loop.GetMergeBlock()) { - uint32_t merge_id = sub_loop.GetMergeBlock()->id(); - if (dead_blocks.count(merge_id)) { - unreachable_merges->insert(sub_loop.GetMergeBlock()->id()); - } - } - } - } - if (!is_main_loop_dead) dead_loops.erase(loop); - - // Remove dead blocks from live loops. - for (uint32_t bb_id : dead_blocks) { - Loop* l = loop_desc_[bb_id]; - if (l) { - l->RemoveBasicBlock(bb_id); - loop_desc_.ForgetBasicBlock(bb_id); - } - } - - std::for_each( - dead_loops.begin(), dead_loops.end(), - [&loop, - this](std::unordered_map::iterator::reference it) { - if (it.first == loop) loop = nullptr; - loop_desc_.RemoveLoop(it.first); - }); - - return loop; } // Returns true if |var| is dynamically uniform. @@ -835,17 +549,25 @@ class LoopUnswitch { }); } - // Returns true if |insn| is constant and dynamically uniform within the loop. - bool IsConditionLoopInvariant(Instruction* insn) { + // Returns true if |insn| is not a constant, but is loop invariant and + // dynamically uniform. + bool IsConditionNonConstantLoopInvariant(Instruction* insn) { assert(insn->IsBranch()); assert(insn->opcode() != SpvOpBranch); analysis::DefUseManager* def_use_mgr = context_->get_def_use_mgr(); Instruction* condition = def_use_mgr->GetDef(insn->GetOperand(0).words[0]); - return !loop_->IsInsideLoop(condition) && - IsDynamicallyUniform( - condition, function_->entry().get(), - context_->GetPostDominatorAnalysis(function_)->GetDomTree()); + if (condition->IsConstant()) { + return false; + } + + if (loop_->IsInsideLoop(condition)) { + return false; + } + + return IsDynamicallyUniform( + condition, function_->entry().get(), + context_->GetPostDominatorAnalysis(function_)->GetDomTree()); } }; @@ -879,7 +601,7 @@ bool LoopUnswitchPass::ProcessFunction(Function* f) { processed_loop.insert(&loop); LoopUnswitch unswitcher(context(), f, &loop, &loop_descriptor); - while (!unswitcher.WasLoopKilled() && unswitcher.CanUnswitchLoop()) { + while (unswitcher.CanUnswitchLoop()) { if (!loop.IsLCSSA()) { LoopUtils(context(), &loop).MakeLoopClosedSSA(); } diff --git a/3rdparty/spirv-tools/source/opt/loop_utils.cpp b/3rdparty/spirv-tools/source/opt/loop_utils.cpp index 482335f3b..8c6d355d6 100644 --- a/3rdparty/spirv-tools/source/opt/loop_utils.cpp +++ b/3rdparty/spirv-tools/source/opt/loop_utils.cpp @@ -352,6 +352,7 @@ void LoopUtils::CreateLoopDedicatedExits() { assert(insert_pt != function->end() && "Basic Block not found"); // Create the dedicate exit basic block. + // TODO(1841): Handle id overflow. BasicBlock& exit = *insert_pt.InsertBefore(std::unique_ptr( new BasicBlock(std::unique_ptr(new Instruction( context_, SpvOpLabel, 0, context_->TakeNextId(), {}))))); @@ -491,6 +492,7 @@ Loop* LoopUtils::CloneAndAttachLoopToHeader(LoopCloningResult* cloning_result) { Loop* new_loop = CloneLoop(cloning_result); // Create a new exit block/label for the new loop. + // TODO(1841): Handle id overflow. std::unique_ptr new_label{new Instruction( context_, SpvOp::SpvOpLabel, 0, context_->TakeNextId(), {})}; std::unique_ptr new_exit_bb{new BasicBlock(std::move(new_label))}; @@ -528,6 +530,7 @@ Loop* LoopUtils::CloneAndAttachLoopToHeader(LoopCloningResult* cloning_result) { inst->SetOperand(operand, {new_header}); }); + // TODO(1841): Handle failure to create pre-header. def_use->ForEachUse( loop_->GetOrCreatePreHeaderBlock()->id(), [new_merge_block, this](Instruction* inst, uint32_t operand) { @@ -560,6 +563,7 @@ Loop* LoopUtils::CloneLoop( // between old and new ids. BasicBlock* new_bb = old_bb->Clone(context_); new_bb->SetParent(&function_); + // TODO(1841): Handle id overflow. new_bb->GetLabelInst()->SetResultId(context_->TakeNextId()); def_use_mgr->AnalyzeInstDef(new_bb->GetLabelInst()); context_->set_instr_block(new_bb->GetLabelInst(), new_bb); @@ -575,6 +579,7 @@ Loop* LoopUtils::CloneLoop( new_inst != new_bb->end(); ++new_inst, ++old_inst) { cloning_result->ptr_map_[&*new_inst] = &*old_inst; if (new_inst->HasResultId()) { + // TODO(1841): Handle id overflow. new_inst->SetResultId(context_->TakeNextId()); cloning_result->value_map_[old_inst->result_id()] = new_inst->result_id(); diff --git a/3rdparty/spirv-tools/source/opt/mem_pass.cpp b/3rdparty/spirv-tools/source/opt/mem_pass.cpp index c65e04938..cc0976767 100644 --- a/3rdparty/spirv-tools/source/opt/mem_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/mem_pass.cpp @@ -119,7 +119,7 @@ Instruction* MemPass::GetPtr(uint32_t ptrId, uint32_t* varId) { Instruction* MemPass::GetPtr(Instruction* ip, uint32_t* varId) { assert(ip->opcode() == SpvOpStore || ip->opcode() == SpvOpLoad || - ip->opcode() == SpvOpImageTexelPointer); + ip->opcode() == SpvOpImageTexelPointer || ip->IsAtomicWithLoad()); // All of these opcode place the pointer in position 0. const uint32_t ptrId = ip->GetSingleWordInOperand(0); diff --git a/3rdparty/spirv-tools/source/opt/merge_return_pass.cpp b/3rdparty/spirv-tools/source/opt/merge_return_pass.cpp index 4068d4a18..4f49c70f2 100644 --- a/3rdparty/spirv-tools/source/opt/merge_return_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/merge_return_pass.cpp @@ -22,52 +22,69 @@ #include "source/opt/ir_builder.h" #include "source/opt/ir_context.h" #include "source/opt/reflect.h" +#include "source/util/bit_vector.h" #include "source/util/make_unique.h" namespace spvtools { namespace opt { Pass::Status MergeReturnPass::Process() { - bool modified = false; bool is_shader = context()->get_feature_mgr()->HasCapability(SpvCapabilityShader); - for (auto& function : *get_module()) { - std::vector return_blocks = CollectReturnBlocks(&function); - if (return_blocks.size() <= 1) continue; - function_ = &function; + bool failed = false; + ProcessFunction pfn = [&failed, is_shader, this](Function* function) { + std::vector return_blocks = CollectReturnBlocks(function); + if (return_blocks.size() <= 1) { + return false; + } + + function_ = function; return_flag_ = nullptr; return_value_ = nullptr; final_return_block_ = nullptr; - modified = true; if (is_shader) { - ProcessStructured(&function, return_blocks); + if (!ProcessStructured(function, return_blocks)) { + failed = true; + } } else { - MergeReturnBlocks(&function, return_blocks); + MergeReturnBlocks(function, return_blocks); } + return true; + }; + + bool modified = context()->ProcessReachableCallTree(pfn); + + if (failed) { + return Status::Failure; } return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange; } -void MergeReturnPass::ProcessStructured( +bool MergeReturnPass::ProcessStructured( Function* function, const std::vector& return_blocks) { + if (HasNontrivialUnreachableBlocks(function)) { + if (consumer()) { + std::string message = + "Module contains unreachable blocks during merge return. Run dead " + "branch elimination before merge return."; + consumer()(SPV_MSG_ERROR, 0, {0, 0, 0}, message.c_str()); + } + return false; + } + + AddDummyLoopAroundFunction(); + std::list order; cfg()->ComputeStructuredOrder(function, &*function->begin(), &order); - // Create the new return block - CreateReturnBlock(); - - // Create the return - CreateReturn(final_return_block_); - - cfg()->RegisterBlock(final_return_block_); - state_.clear(); state_.emplace_back(nullptr, nullptr); for (auto block : order) { - if (cfg()->IsPseudoEntryBlock(block) || cfg()->IsPseudoExitBlock(block)) { + if (cfg()->IsPseudoEntryBlock(block) || cfg()->IsPseudoExitBlock(block) || + block == final_return_block_) { continue; } @@ -104,7 +121,9 @@ void MergeReturnPass::ProcessStructured( // Predicate successors of the original return blocks as necessary. if (std::find(return_blocks.begin(), return_blocks.end(), block) != return_blocks.end()) { - PredicateBlocks(block, &predicated, &order); + if (!PredicateBlocks(block, &predicated, &order)) { + return false; + } } // Generate state for next block @@ -119,6 +138,7 @@ void MergeReturnPass::ProcessStructured( // Invalidate it at this point to make sure it will be rebuilt. context()->RemoveDominatorAnalysis(function); AddNewPhiNodes(); + return true; } void MergeReturnPass::CreateReturnBlock() { @@ -175,14 +195,8 @@ void MergeReturnPass::ProcessStructuredBlock(BasicBlock* block) { if (tail_opcode == SpvOpReturn || tail_opcode == SpvOpReturnValue || tail_opcode == SpvOpUnreachable) { - if (CurrentState().InLoop()) { - // Can always break out of innermost loop - BranchToBlock(block, CurrentState().LoopMergeId()); - } else if (CurrentState().InStructuredFlow()) { - BranchToBlock(block, CurrentState().CurrentMergeId()); - } else { - BranchToBlock(block, final_return_block_->id()); - } + assert(CurrentState().InLoop() && "Should be in the dummy loop."); + BranchToBlock(block, CurrentState().LoopMergeId()); } } @@ -192,7 +206,11 @@ void MergeReturnPass::BranchToBlock(BasicBlock* block, uint32_t target) { RecordReturned(block); RecordReturnValue(block); } + BasicBlock* target_block = context()->get_instr_block(target); + if (target_block->GetLoopMergeInst()) { + cfg()->SplitLoopHeader(target_block); + } UpdatePhiNodes(block, target_block); Instruction* return_inst = block->terminator(); @@ -227,8 +245,22 @@ void MergeReturnPass::CreatePhiNodesForInst(BasicBlock* merge_block, if (inst.result_id() != 0) { std::vector users_to_update; context()->get_def_use_mgr()->ForEachUser( - &inst, [&users_to_update, &dom_tree, inst_bb, this](Instruction* user) { - BasicBlock* user_bb = context()->get_instr_block(user); + &inst, + [&users_to_update, &dom_tree, &inst, inst_bb, this](Instruction* user) { + BasicBlock* user_bb = nullptr; + if (user->opcode() != SpvOpPhi) { + user_bb = context()->get_instr_block(user); + } else { + // For OpPhi, the use should be considered to be in the predecessor. + for (uint32_t i = 0; i < user->NumInOperands(); i += 2) { + if (user->GetSingleWordInOperand(i) == inst.result_id()) { + uint32_t user_bb_id = user->GetSingleWordInOperand(i + 1); + user_bb = context()->get_instr_block(user_bb_id); + break; + } + } + } + // If |user_bb| is nullptr, then |user| is not in the function. It is // something like an OpName or decoration, which should not be // replaced with the result of the OpPhi. @@ -276,14 +308,14 @@ void MergeReturnPass::CreatePhiNodesForInst(BasicBlock* merge_block, } } -void MergeReturnPass::PredicateBlocks( +bool MergeReturnPass::PredicateBlocks( BasicBlock* return_block, std::unordered_set* predicated, std::list* order) { // The CFG is being modified as the function proceeds so avoid caching // successors. if (predicated->count(return_block)) { - return; + return true; } BasicBlock* block = nullptr; @@ -310,71 +342,28 @@ void MergeReturnPass::PredicateBlocks( while (block != nullptr && block != final_return_block_) { if (!predicated->insert(block).second) break; // Skip structured subgraphs. - BasicBlock* next = nullptr; - if (state->InLoop()) { - next = context()->get_instr_block(state->LoopMergeId()); - while (state->LoopMergeId() == next->id()) { - state++; - } - BreakFromConstruct(block, next, predicated, order); - } else if (false && state->InStructuredFlow()) { - // TODO(#1861): This is disabled until drivers are fixed to accept - // conditional exits from a selection construct. Reenable tests when - // this code is turned back on. - - next = context()->get_instr_block(state->CurrentMergeId()); + assert(state->InLoop() && "Should be in the dummy loop at the very least."); + Instruction* current_loop_merge_inst = state->LoopMergeInst(); + uint32_t merge_block_id = + current_loop_merge_inst->GetSingleWordInOperand(0); + while (state->LoopMergeId() == merge_block_id) { state++; - BreakFromConstruct(block, next, predicated, order); - } else { - BasicBlock* tail = block; - while (tail->GetMergeInst()) { - tail = context()->get_instr_block(tail->MergeBlockIdIfAny()); - } - - // Must find |next| (the successor of |tail|) before predicating the - // block because, if |block| == |tail|, then |tail| will have multiple - // successors. - next = nullptr; - const_cast(tail)->ForEachSuccessorLabel( - [this, &next](const uint32_t idx) { - BasicBlock* succ_block = context()->get_instr_block(idx); - assert(next == nullptr && - "Found block with multiple successors and no merge " - "instruction."); - next = succ_block; - }); - - PredicateBlock(block, tail, predicated, order); } - block = next; + if (!BreakFromConstruct(block, predicated, order, + current_loop_merge_inst)) { + return false; + } + block = context()->get_instr_block(merge_block_id); } + return true; } -bool MergeReturnPass::RequiresPredication(const BasicBlock* block, - const BasicBlock* tail_block) const { - // This is intentionally conservative. - // TODO(alanbaker): re-visit this when more performance data is available. - if (block != tail_block) return true; - - bool requires_predicate = false; - block->ForEachInst([&requires_predicate](const Instruction* inst) { - if (inst->opcode() != SpvOpPhi && inst->opcode() != SpvOpLabel && - !IsTerminatorInst(inst->opcode())) { - requires_predicate = true; - } - }); - return requires_predicate; -} - -void MergeReturnPass::PredicateBlock( - BasicBlock* block, BasicBlock* tail_block, - std::unordered_set* predicated, - std::list* order) { - if (!RequiresPredication(block, tail_block)) { - return; - } - - // Make sure the cfg is build here. If we don't then it becomes very hard +bool MergeReturnPass::BreakFromConstruct( + BasicBlock* block, std::unordered_set* predicated, + std::list* order, Instruction* loop_merge_inst) { + assert(loop_merge_inst->opcode() == SpvOpLoopMerge && + "loop_merge_inst must be a loop merge instruction."); + // Make sure the CFG is build here. If we don't then it becomes very hard // to know which new blocks need to be updated. context()->BuildInvalidAnalyses(IRContext::kAnalysisCFG); @@ -390,7 +379,15 @@ void MergeReturnPass::PredicateBlock( // If |block| is a loop header, then the back edge must jump to the original // code, not the new header. if (block->GetLoopMergeInst()) { - cfg()->SplitLoopHeader(block); + if (cfg()->SplitLoopHeader(block) == nullptr) { + return false; + } + } + + uint32_t merge_block_id = loop_merge_inst->GetSingleWordInOperand(0); + BasicBlock* merge_block = context()->get_instr_block(merge_block_id); + if (merge_block->GetLoopMergeInst()) { + cfg()->SplitLoopHeader(merge_block); } // Leave the phi instructions behind. @@ -402,153 +399,16 @@ void MergeReturnPass::PredicateBlock( // Forget about the edges leaving block. They will be removed. cfg()->RemoveSuccessorEdges(block); - std::unique_ptr new_block( - block->SplitBasicBlock(context(), TakeNextId(), iter)); - BasicBlock* old_body = - function_->InsertBasicBlockAfter(std::move(new_block), block); + BasicBlock* old_body = block->SplitBasicBlock(context(), TakeNextId(), iter); predicated->insert(old_body); - // Update |order| so old_block will be traversed. - InsertAfterElement(block, old_body, order); - - if (tail_block == block) { - tail_block = old_body; + // If |block| was a continue target for a loop |old_body| is now the correct + // continue target. + if (loop_merge_inst->GetSingleWordInOperand(1) == block->id()) { + loop_merge_inst->SetInOperand(1, {old_body->id()}); + context()->UpdateDefUse(loop_merge_inst); } - const BasicBlock* const_old_body = static_cast(old_body); - const_old_body->ForEachSuccessorLabel( - [old_body, block, this](const uint32_t label) { - BasicBlock* target_bb = context()->get_instr_block(label); - if (MarkedSinglePred(target_bb) == block) { - MarkForNewPhiNodes(target_bb, old_body); - } - }); - - std::unique_ptr new_merge_block(new BasicBlock( - MakeUnique(context(), SpvOpLabel, 0, TakeNextId(), - std::initializer_list{}))); - - BasicBlock* new_merge = - function_->InsertBasicBlockAfter(std::move(new_merge_block), tail_block); - predicated->insert(new_merge); - new_merge->SetParent(function_); - - // Update |order| so old_block will be traversed. - InsertAfterElement(tail_block, new_merge, order); - - // Register the new label. - get_def_use_mgr()->AnalyzeInstDef(new_merge->GetLabelInst()); - context()->set_instr_block(new_merge->GetLabelInst(), new_merge); - - // Move the tail branch into the new merge and fix the mapping. If a single - // block is being predicated then its branch was moved to the old body - // previously. - std::unique_ptr inst; - Instruction* i = tail_block->terminator(); - cfg()->RemoveSuccessorEdges(tail_block); - get_def_use_mgr()->ClearInst(i); - inst.reset(std::move(i)); - inst->RemoveFromList(); - new_merge->end().InsertBefore(std::move(inst)); - get_def_use_mgr()->AnalyzeInstUse(new_merge->terminator()); - context()->set_instr_block(new_merge->terminator(), new_merge); - - // Add a branch to the new merge. If we jumped multiple blocks, the branch - // is added to tail_block, otherwise the branch belongs in old_body. - tail_block->AddInstruction( - MakeUnique(context(), SpvOpBranch, 0, 0, - std::initializer_list{ - {SPV_OPERAND_TYPE_ID, {new_merge->id()}}})); - get_def_use_mgr()->AnalyzeInstUse(tail_block->terminator()); - context()->set_instr_block(tail_block->terminator(), tail_block); - - // Within the new header we need the following: - // 1. Load of the return status flag - // 2. Declare the merge block - // 3. Branch to new merge (true) or old body (false) - - // 1. Load of the return status flag - analysis::Bool bool_type; - uint32_t bool_id = context()->get_type_mgr()->GetId(&bool_type); - assert(bool_id != 0); - uint32_t load_id = TakeNextId(); - block->AddInstruction(MakeUnique( - context(), SpvOpLoad, bool_id, load_id, - std::initializer_list{ - {SPV_OPERAND_TYPE_ID, {return_flag_->result_id()}}})); - get_def_use_mgr()->AnalyzeInstDefUse(block->terminator()); - context()->set_instr_block(block->terminator(), block); - - // 2. Declare the merge block - block->AddInstruction(MakeUnique( - context(), SpvOpSelectionMerge, 0, 0, - std::initializer_list{{SPV_OPERAND_TYPE_ID, {new_merge->id()}}, - {SPV_OPERAND_TYPE_SELECTION_CONTROL, - {SpvSelectionControlMaskNone}}})); - get_def_use_mgr()->AnalyzeInstUse(block->terminator()); - context()->set_instr_block(block->terminator(), block); - - // 3. Branch to new merge (true) or old body (false) - block->AddInstruction(MakeUnique( - context(), SpvOpBranchConditional, 0, 0, - std::initializer_list{{SPV_OPERAND_TYPE_ID, {load_id}}, - {SPV_OPERAND_TYPE_ID, {new_merge->id()}}, - {SPV_OPERAND_TYPE_ID, {old_body->id()}}})); - get_def_use_mgr()->AnalyzeInstUse(block->terminator()); - context()->set_instr_block(block->terminator(), block); - - assert(old_body->begin() != old_body->end()); - assert(block->begin() != block->end()); - assert(new_merge->begin() != new_merge->end()); - - // Update the cfg - cfg()->AddEdges(block); - cfg()->RegisterBlock(old_body); - if (old_body != tail_block) { - cfg()->AddEdges(tail_block); - } - cfg()->RegisterBlock(new_merge); - MarkForNewPhiNodes(new_merge, tail_block); -} - -void MergeReturnPass::BreakFromConstruct( - BasicBlock* block, BasicBlock* merge_block, - std::unordered_set* predicated, - std::list* order) { - // Make sure the cfg is build here. If we don't then it becomes very hard - // to know which new blocks need to be updated. - context()->BuildInvalidAnalyses(IRContext::kAnalysisCFG); - - // When predicating, be aware of whether this block is a header block, a - // merge block or both. - // - // If this block is a merge block, ensure the appropriate header stays - // up-to-date with any changes (i.e. points to the pre-header). - // - // If this block is a header block, predicate the entire structured - // subgraph. This can act recursively. - - // If |block| is a loop header, then the back edge must jump to the original - // code, not the new header. - if (block->GetLoopMergeInst()) { - cfg()->SplitLoopHeader(block); - } - - // Leave the phi instructions behind. - auto iter = block->begin(); - while (iter->opcode() == SpvOpPhi) { - ++iter; - } - - // Forget about the edges leaving block. They will be removed. - cfg()->RemoveSuccessorEdges(block); - - std::unique_ptr new_block( - block->SplitBasicBlock(context(), TakeNextId(), iter)); - BasicBlock* old_body = - function_->InsertBasicBlockAfter(std::move(new_block), block); - predicated->insert(old_body); - // Update |order| so old_block will be traversed. InsertAfterElement(block, old_body, order); @@ -556,34 +416,24 @@ void MergeReturnPass::BreakFromConstruct( // 1. Load of the return status flag // 2. Branch to |merge_block| (true) or old body (false) // 3. Update OpPhi instructions in |merge_block|. + // 4. Update the CFG. // // Sine we are branching to the merge block of the current construct, there is // no need for an OpSelectionMerge. + InstructionBuilder builder( + context(), block, + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); // 1. Load of the return status flag analysis::Bool bool_type; uint32_t bool_id = context()->get_type_mgr()->GetId(&bool_type); assert(bool_id != 0); - uint32_t load_id = TakeNextId(); - block->AddInstruction(MakeUnique( - context(), SpvOpLoad, bool_id, load_id, - std::initializer_list{ - {SPV_OPERAND_TYPE_ID, {return_flag_->result_id()}}})); - get_def_use_mgr()->AnalyzeInstDefUse(block->terminator()); - context()->set_instr_block(block->terminator(), block); + uint32_t load_id = + builder.AddLoad(bool_id, return_flag_->result_id())->result_id(); // 2. Branch to |merge_block| (true) or |old_body| (false) - block->AddInstruction(MakeUnique( - context(), SpvOpBranchConditional, 0, 0, - std::initializer_list{{SPV_OPERAND_TYPE_ID, {load_id}}, - {SPV_OPERAND_TYPE_ID, {merge_block->id()}}, - {SPV_OPERAND_TYPE_ID, {old_body->id()}}})); - get_def_use_mgr()->AnalyzeInstUse(block->terminator()); - context()->set_instr_block(block->terminator(), block); - - // Update the cfg - cfg()->AddEdges(block); - cfg()->RegisterBlock(old_body); + builder.AddConditionalBranch(load_id, merge_block->id(), old_body->id(), + old_body->id()); // 3. Update OpPhi instructions in |merge_block|. BasicBlock* merge_original_pred = MarkedSinglePred(merge_block); @@ -593,8 +443,15 @@ void MergeReturnPass::BreakFromConstruct( MarkForNewPhiNodes(merge_block, old_body); } + // 4. Update the CFG. We do this after updating the OpPhi instructions + // because |UpdatePhiNodes| assumes the edge from |block| has not been added + // to the CFG yet. + cfg()->AddEdges(block); + cfg()->RegisterBlock(old_body); + assert(old_body->begin() != old_body->end()); assert(block->begin() != block->end()); + return true; } void MergeReturnPass::RecordReturned(BasicBlock* block) { @@ -786,8 +643,10 @@ void MergeReturnPass::AddNewPhiNodes() { cfg()->ComputeStructuredOrder(function_, &*function_->begin(), &order); for (BasicBlock* bb : order) { - AddNewPhiNodes(bb, new_merge_nodes_[bb], - dom_tree->ImmediateDominator(bb)->id()); + BasicBlock* dominator = dom_tree->ImmediateDominator(bb); + if (dominator) { + AddNewPhiNodes(bb, new_merge_nodes_[bb], dominator->id()); + } } } @@ -820,5 +679,138 @@ void MergeReturnPass::InsertAfterElement(BasicBlock* element, list->insert(pos, new_element); } +void MergeReturnPass::AddDummyLoopAroundFunction() { + CreateReturnBlock(); + CreateReturn(final_return_block_); + + if (context()->AreAnalysesValid(IRContext::kAnalysisCFG)) { + cfg()->RegisterBlock(final_return_block_); + } + + CreateDummyLoop(final_return_block_); +} + +BasicBlock* MergeReturnPass::CreateContinueTarget(uint32_t header_label_id) { + std::unique_ptr label( + new Instruction(context(), SpvOpLabel, 0u, TakeNextId(), {})); + + // Create the new basic block + std::unique_ptr block(new BasicBlock(std::move(label))); + + // Insert the new block just before the return block + auto pos = function_->end(); + assert(pos != function_->begin()); + pos--; + assert(pos != function_->begin()); + assert(&*pos == final_return_block_); + auto new_block = &*pos.InsertBefore(std::move(block)); + new_block->SetParent(function_); + + context()->AnalyzeDefUse(new_block->GetLabelInst()); + context()->set_instr_block(new_block->GetLabelInst(), new_block); + + InstructionBuilder builder( + context(), new_block, + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); + + builder.AddBranch(header_label_id); + + if (context()->AreAnalysesValid(IRContext::kAnalysisCFG)) { + cfg()->RegisterBlock(new_block); + } + + return new_block; +} + +void MergeReturnPass::CreateDummyLoop(BasicBlock* merge_target) { + std::unique_ptr label( + new Instruction(context(), SpvOpLabel, 0u, TakeNextId(), {})); + + // Create the new basic block + std::unique_ptr block(new BasicBlock(std::move(label))); + + // Insert the new block before any code is run. We have to split the entry + // block to make sure the OpVariable instructions remain in the entry block. + BasicBlock* start_block = &*function_->begin(); + auto split_pos = start_block->begin(); + while (split_pos->opcode() == SpvOpVariable) { + ++split_pos; + } + + BasicBlock* old_block = + start_block->SplitBasicBlock(context(), TakeNextId(), split_pos); + + // The new block must be inserted after the entry block. We cannot make the + // entry block the header for the dummy loop because it is not valid to have a + // branch to the entry block, and the continue target must branch back to the + // loop header. + auto pos = function_->begin(); + pos++; + BasicBlock* header_block = &*pos.InsertBefore(std::move(block)); + context()->AnalyzeDefUse(header_block->GetLabelInst()); + header_block->SetParent(function_); + + // We have to create the continue block before OpLoopMerge instruction. + // Otherwise the def-use manager will compalain that there is a use without a + // definition. + uint32_t continue_target = CreateContinueTarget(header_block->id())->id(); + + // Add the code the the header block. + InstructionBuilder builder( + context(), header_block, + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); + + builder.AddLoopMerge(merge_target->id(), continue_target); + builder.AddBranch(old_block->id()); + + // Fix up the entry block by adding a branch to the loop header. + InstructionBuilder builder2( + context(), start_block, + IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping); + builder2.AddBranch(header_block->id()); + + if (context()->AreAnalysesValid(IRContext::kAnalysisCFG)) { + cfg()->RegisterBlock(old_block); + cfg()->RegisterBlock(header_block); + cfg()->AddEdges(start_block); + } +} + +bool MergeReturnPass::HasNontrivialUnreachableBlocks(Function* function) { + utils::BitVector reachable_blocks; + cfg()->ForEachBlockInPostOrder( + function->entry().get(), + [&reachable_blocks](BasicBlock* bb) { reachable_blocks.Set(bb->id()); }); + + for (auto& bb : *function) { + if (reachable_blocks.Get(bb.id())) { + continue; + } + + StructuredCFGAnalysis* struct_cfg_analysis = + context()->GetStructuredCFGAnalysis(); + if (struct_cfg_analysis->IsMergeBlock(bb.id())) { + // |bb| must be an empty block ending with OpUnreachable. + if (bb.begin()->opcode() != SpvOpUnreachable) { + return true; + } + } else if (struct_cfg_analysis->IsContinueBlock(bb.id())) { + // |bb| must be an empty block ending with a branch to the header. + Instruction* inst = &*bb.begin(); + if (inst->opcode() != SpvOpBranch) { + return true; + } + + if (inst->GetSingleWordInOperand(0) != + struct_cfg_analysis->ContainingLoop(bb.id())) { + return true; + } + } else { + return true; + } + } + return false; +} + } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/merge_return_pass.h b/3rdparty/spirv-tools/source/opt/merge_return_pass.h index 472d059fe..d7e18f0c5 100644 --- a/3rdparty/spirv-tools/source/opt/merge_return_pass.h +++ b/3rdparty/spirv-tools/source/opt/merge_return_pass.h @@ -30,13 +30,13 @@ namespace opt { * * Handling Structured Control Flow: * - * Structured control flow guarantees that the CFG will reconverge at a given + * Structured control flow guarantees that the CFG will converge at a given * point (the merge block). Within structured control flow, all blocks must be * post-dominated by the merge block, except return blocks and break blocks. * A break block is a block that branches to the innermost loop's merge block. * * Beyond this, we further assume that all unreachable blocks have been - * cleanedup. This means that the only unreachable blocks are those necessary + * cleaned up. This means that the only unreachable blocks are those necessary * for valid structured control flow. * * Algorithm: @@ -46,14 +46,13 @@ namespace opt { * with a branch. If current block is not within structured control flow, this * is the final return. This block should branch to the new return block (its * direct successor). If the current block is within structured control flow, - * the branch destination should be the innermost loop's merge (if it exists) - * or the merge block of the immediate structured control flow. If the merge - * block produces any live values it will need to be predicated. While the merge - * is nested in structured control flow, the predication path should branch to - * the next best merge block available. Once structured control flow has been - * exited, remaining blocks must be predicated with new structured control flow - * (OpSelectionMerge). These should be nested correctly in case of straight line - * branching to reach the final return block. + * the branch destination should be the innermost loop's merge. This loop will + * always exist because a dummy loop is added around the entire function. + * If the merge block produces any live values it will need to be predicated. + * While the merge is nested in structured control flow, the predication path + *should branch to the merge block of the inner-most loop it is contained in. + *Once structured control flow has been exited, it will be at the merge of the + *dummy loop, with will simply return. * * In the final return block, the return value should be loaded and returned. * Memory promotion passes should be able to promote the newly introduced @@ -65,31 +64,29 @@ namespace opt { * that block produces value live beyond it). This needs to be done carefully. * The merge block should be split into multiple blocks. * - * 1 (header) + * 1 (loop header) * / \ * (ret) 2 3 (merge) * * || * \/ * - * 1 (header) - * / \ - * 2 | - * \ / - * 3 (merge for 1, new header) - * / \ - * | 3 (old body) - * \ / - * (ret) 4 (new merge) + * 0 (dummy loop header) + * | + * 1 (loop header) + * / \ + * 2 | (merge) + * \ / + * 3' (merge) + * / \ + * | 3 (original code in 3) + * \ / + * (ret) 4 (dummy loop merge) * * In the above (simple) example, the return originally in |2| is passed through * the merge. That merge is predicated such that the old body of the block is * the else branch. The branch condition is based on the value of the "has - * returned" variable. In more complicated examples (blocks between |1| and - * |3|), the SSA would need to fixed up due the newly reconvergent path at the - * merge for |1|. Assuming |3| originally was also a return block, the old body - * of |3| should also store the return value for that case. The return value in - * |4| just requires loading the return value variable. + * returned" variable. * ******************************************************************************/ @@ -107,8 +104,7 @@ class MergeReturnPass : public MemPass { Status Process() override; IRContext::Analysis GetPreservedAnalyses() override { - // return IRContext::kAnalysisDefUse; - return IRContext::kAnalysisNone; + return IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: @@ -167,7 +163,7 @@ class MergeReturnPass : public MemPass { // statement. It is assumed that |function| has structured control flow, and // that |return_blocks| is a list of all of the basic blocks in |function| // that have a return. - void ProcessStructured(Function* function, + bool ProcessStructured(Function* function, const std::vector& return_blocks); // Changes an OpReturn* or OpUnreachable instruction at the end of |block| @@ -209,12 +205,6 @@ class MergeReturnPass : public MemPass { // |AddReturnFlag| and |AddReturnValue| must have already been called. void BranchToBlock(BasicBlock* block, uint32_t target); - // Returns true if we need to predicate |block| where |tail_block| is the - // merge point. (See |PredicateBlocks|). There is no need to predicate if - // there is no code that could be executed. - bool RequiresPredication(const BasicBlock* block, - const BasicBlock* tail_block) const; - // For every basic block that is reachable from |return_block|, extra code is // added to jump around any code that should not be executed because the // original code would have already returned. This involves adding new @@ -222,29 +212,25 @@ class MergeReturnPass : public MemPass { // // If new blocks that are created will be added to |order|. This way a call // can traverse these new block in structured order. - void PredicateBlocks(BasicBlock* return_block, + // + // Returns true if successful. + bool PredicateBlocks(BasicBlock* return_block, std::unordered_set* pSet, std::list* order); // Add a conditional branch at the start of |block| that either jumps to - // |merge_block| or the original code in |block| depending on the value in - // |return_flag_|. + // the merge block of |loop_merge_inst| or the original code in |block| + // depending on the value in |return_flag_|. The continue target in + // |loop_merge_inst| will be updated if needed. // // If new blocks that are created will be added to |order|. This way a call // can traverse these new block in structured order. - void BreakFromConstruct(BasicBlock* block, BasicBlock* merge_block, + // + // Returns true if successful. + bool BreakFromConstruct(BasicBlock* block, std::unordered_set* predicated, - std::list* order); - - // Add the predication code (see |PredicateBlocks|) to |tail_block| if it - // requires predication. |tail_block| and any new blocks that are known to - // not require predication will be added to |predicated|. - // - // If new blocks that are created will be added to |order|. This way a call - // can traverse these new block in structured order. - void PredicateBlock(BasicBlock* block, BasicBlock* tail_block, - std::unordered_set* predicated, - std::list* order); + std::list* order, + Instruction* loop_merge_inst); // Add an |OpReturn| or |OpReturnValue| to the end of |block|. If an // |OpReturnValue| is needed, the return value is loaded from |return_value_|. @@ -291,6 +277,8 @@ class MergeReturnPass : public MemPass { // new edge from |new_source|. The value for that edge will be an Undef. If // |target| only had a single predecessor, then it is marked as needing new // phi nodes. See |MarkForNewPhiNodes|. + // + // The CFG must not include the edge from |new_source| to |target| yet. void UpdatePhiNodes(BasicBlock* new_source, BasicBlock* target); StructuredControlState& CurrentState() { return state_.back(); } @@ -300,6 +288,20 @@ class MergeReturnPass : public MemPass { void InsertAfterElement(BasicBlock* element, BasicBlock* new_element, std::list* list); + // Creates a single iteration loop around all of the exectuable code of the + // current function and returns after the loop is done. Sets + // |final_return_block_|. + void AddDummyLoopAroundFunction(); + + // Creates a new basic block that branches to |header_label_id|. Returns the + // new basic block. The block will be the second last basic block in the + // function. + BasicBlock* CreateContinueTarget(uint32_t header_label_id); + + // Creates a loop around the executable code of the function with + // |merge_target| as the merge node. + void CreateDummyLoop(BasicBlock* merge_target); + // A stack used to keep track of the innermost contain loop and selection // constructs. std::vector state_; @@ -328,6 +330,7 @@ class MergeReturnPass : public MemPass { // it is mapped to it original single predcessor. It is assumed there are no // values that will need a phi on the new edges. std::unordered_map new_merge_nodes_; + bool HasNontrivialUnreachableBlocks(Function* function); }; } // namespace opt diff --git a/3rdparty/spirv-tools/source/opt/module.cpp b/3rdparty/spirv-tools/source/opt/module.cpp index 6d024b5bc..04e4e9733 100644 --- a/3rdparty/spirv-tools/source/opt/module.cpp +++ b/3rdparty/spirv-tools/source/opt/module.cpp @@ -19,11 +19,24 @@ #include #include "source/operand.h" +#include "source/opt/ir_context.h" #include "source/opt/reflect.h" namespace spvtools { namespace opt { +uint32_t Module::TakeNextIdBound() { + if (context()) { + if (id_bound() >= context()->max_id_bound()) { + return 0; + } + } else if (id_bound() >= kDefaultMaxIdBound) { + return 0; + } + + return header_.bound++; +} + std::vector Module::GetTypes() { std::vector type_insts; for (auto& inst : types_values_) { diff --git a/3rdparty/spirv-tools/source/opt/module.h b/3rdparty/spirv-tools/source/opt/module.h index eca8cc779..ede0bbbf3 100644 --- a/3rdparty/spirv-tools/source/opt/module.h +++ b/3rdparty/spirv-tools/source/opt/module.h @@ -53,14 +53,22 @@ class Module { // Sets the header to the given |header|. void SetHeader(const ModuleHeader& header) { header_ = header; } - // Sets the Id bound. - void SetIdBound(uint32_t bound) { header_.bound = bound; } + // Sets the Id bound. The Id bound cannot be set to 0. + void SetIdBound(uint32_t bound) { + assert(bound != 0); + header_.bound = bound; + } // Returns the Id bound. uint32_t IdBound() { return header_.bound; } // Returns the current Id bound and increases it to the next available value. - uint32_t TakeNextIdBound() { return header_.bound++; } + // If the id bound has already reached its maximum value, then 0 is returned. + // The maximum value for the id bound is obtained from the context. If there + // is none, then the minimum that limit can be according to the spir-v + // specification. + // TODO(1841): Update the uses to check for a 0 return value. + uint32_t TakeNextIdBound(); // Appends a capability instruction to this module. inline void AddCapability(std::unique_ptr c); diff --git a/3rdparty/spirv-tools/source/opt/optimizer.cpp b/3rdparty/spirv-tools/source/opt/optimizer.cpp index 30654869c..fb58eedb2 100644 --- a/3rdparty/spirv-tools/source/opt/optimizer.cpp +++ b/3rdparty/spirv-tools/source/opt/optimizer.cpp @@ -20,13 +20,13 @@ #include #include +#include #include "source/opt/build_module.h" #include "source/opt/log.h" #include "source/opt/pass_manager.h" #include "source/opt/passes.h" -#include "source/opt/reduce_load_size.h" -#include "source/opt/simplification_pass.h" #include "source/util/make_unique.h" +#include "source/util/string_utils.h" namespace spvtools { @@ -56,7 +56,7 @@ Optimizer::PassToken::~PassToken() {} struct Optimizer::Impl { explicit Impl(spv_target_env env) : target_env(env), pass_manager() {} - const spv_target_env target_env; // Target environment. + spv_target_env target_env; // Target environment. opt::PassManager pass_manager; // Internal implementation pass manager. }; @@ -131,6 +131,7 @@ Optimizer& Optimizer::RegisterLegalizationPasses() { // Propagate constants to get as many constant conditions on branches // as possible. .RegisterPass(CreateCCPPass()) + .RegisterPass(CreateLoopUnrollPass(true)) .RegisterPass(CreateDeadBranchElimPass()) // Copy propagate members. Cleans up code sequences generated by // scalar replacement. Also important for removing OpPhi nodes. @@ -148,7 +149,8 @@ Optimizer& Optimizer::RegisterLegalizationPasses() { } Optimizer& Optimizer::RegisterPerformancePasses() { - return RegisterPass(CreateMergeReturnPass()) + return RegisterPass(CreateDeadBranchElimPass()) + .RegisterPass(CreateMergeReturnPass()) .RegisterPass(CreateInlineExhaustivePass()) .RegisterPass(CreateAggressiveDCEPass()) .RegisterPass(CreatePrivateToLocalPass()) @@ -185,7 +187,8 @@ Optimizer& Optimizer::RegisterPerformancePasses() { } Optimizer& Optimizer::RegisterSizePasses() { - return RegisterPass(CreateMergeReturnPass()) + return RegisterPass(CreateDeadBranchElimPass()) + .RegisterPass(CreateMergeReturnPass()) .RegisterPass(CreateInlineExhaustivePass()) .RegisterPass(CreateAggressiveDCEPass()) .RegisterPass(CreatePrivateToLocalPass()) @@ -213,6 +216,11 @@ Optimizer& Optimizer::RegisterSizePasses() { .RegisterPass(CreateAggressiveDCEPass()); } +Optimizer& Optimizer::RegisterWebGPUPasses() { + return RegisterPass(CreateAggressiveDCEPass()) + .RegisterPass(CreateDeadBranchElimPass()); +} + bool Optimizer::RegisterPassesFromFlags(const std::vector& flags) { for (const auto& flag : flags) { if (!RegisterPassFromFlag(flag)) { @@ -223,29 +231,6 @@ bool Optimizer::RegisterPassesFromFlags(const std::vector& flags) { return true; } -namespace { - -// Splits the string |flag|, of the form '--pass_name[=pass_args]' into two -// strings "pass_name" and "pass_args". If |flag| has no arguments, the second -// string will be empty. -std::pair SplitFlagArgs(const std::string& flag) { - if (flag.size() < 2) return make_pair(flag, std::string()); - - // Detect the last dash before the pass name. Since we have to - // handle single dash options (-O and -Os), count up to two dashes. - size_t dash_ix = 0; - if (flag[0] == '-' && flag[1] == '-') - dash_ix = 2; - else if (flag[0] == '-') - dash_ix = 1; - - size_t ix = flag.find('='); - return (ix != std::string::npos) - ? make_pair(flag.substr(dash_ix, ix - 2), flag.substr(ix + 1)) - : make_pair(flag.substr(dash_ix), std::string()); -} -} // namespace - bool Optimizer::FlagHasValidForm(const std::string& flag) const { if (flag == "-O" || flag == "-Os") { return true; @@ -267,7 +252,7 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { } // Split flags of the form --pass_name=pass_args. - auto p = SplitFlagArgs(flag); + auto p = utils::SplitFlagArgs(flag); std::string pass_name = p.first; std::string pass_args = p.second; @@ -316,6 +301,10 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { RegisterPass(CreateLocalAccessChainConvertPass()); } else if (pass_name == "eliminate-dead-code-aggressive") { RegisterPass(CreateAggressiveDCEPass()); + } else if (pass_name == "propagate-line-info") { + RegisterPass(CreatePropagateLineInfoPass()); + } else if (pass_name == "eliminate-redundant-line-info") { + RegisterPass(CreateRedundantLineInfoElimPass()); } else if (pass_name == "eliminate-insert-extract") { RegisterPass(CreateInsertExtractElimPass()); } else if (pass_name == "eliminate-local-single-block") { @@ -348,12 +337,16 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { if (pass_args.size() == 0) { RegisterPass(CreateScalarReplacementPass()); } else { - int limit = atoi(pass_args.c_str()); - if (limit > 0) { + int limit = -1; + if (pass_args.find_first_not_of("0123456789") == std::string::npos) { + limit = atoi(pass_args.c_str()); + } + + if (limit >= 0) { RegisterPass(CreateScalarReplacementPass(limit)); } else { Error(consumer(), nullptr, {}, - "--scalar-replacement must have no arguments or a positive " + "--scalar-replacement must have no arguments or a non-negative " "integer argument"); return false; } @@ -384,6 +377,12 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { RegisterPass(CreateWorkaround1209Pass()); } else if (pass_name == "replace-invalid-opcode") { RegisterPass(CreateReplaceInvalidOpcodePass()); + } else if (pass_name == "inst-bindless-check") { + RegisterPass(CreateInstBindlessCheckPass(7, 23)); + RegisterPass(CreateSimplificationPass()); + RegisterPass(CreateDeadBranchElimPass()); + RegisterPass(CreateBlockMergePass()); + RegisterPass(CreateAggressiveDCEPass()); } else if (pass_name == "simplify-instructions") { RegisterPass(CreateSimplificationPass()); } else if (pass_name == "ssa-rewrite") { @@ -414,6 +413,8 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { } } else if (pass_name == "loop-unroll") { RegisterPass(CreateLoopUnrollPass(true)); + } else if (pass_name == "upgrade-memory-model") { + RegisterPass(CreateUpgradeMemoryModelPass()); } else if (pass_name == "vector-dce") { RegisterPass(CreateVectorDCEPass()); } else if (pass_name == "loop-unroll-partial") { @@ -454,22 +455,38 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) { return true; } +void Optimizer::SetTargetEnv(const spv_target_env env) { + impl_->target_env = env; +} + bool Optimizer::Run(const uint32_t* original_binary, const size_t original_binary_size, std::vector* optimized_binary) const { return Run(original_binary, original_binary_size, optimized_binary, - ValidatorOptions()); + OptimizerOptions()); } bool Optimizer::Run(const uint32_t* original_binary, const size_t original_binary_size, std::vector* optimized_binary, - const ValidatorOptions& options, + const ValidatorOptions& validator_options, bool skip_validation) const { + OptimizerOptions opt_options; + opt_options.set_run_validator(!skip_validation); + opt_options.set_validator_options(validator_options); + return Run(original_binary, original_binary_size, optimized_binary, + opt_options); +} + +bool Optimizer::Run(const uint32_t* original_binary, + const size_t original_binary_size, + std::vector* optimized_binary, + const spv_optimizer_options opt_options) const { spvtools::SpirvTools tools(impl_->target_env); tools.SetMessageConsumer(impl_->pass_manager.consumer()); - if (!skip_validation && - !tools.Validate(original_binary, original_binary_size, options)) { + if (opt_options->run_validator_ && + !tools.Validate(original_binary, original_binary_size, + &opt_options->val_options_)) { return false; } @@ -477,6 +494,8 @@ bool Optimizer::Run(const uint32_t* original_binary, impl_->target_env, consumer(), original_binary, original_binary_size); if (context == nullptr) return false; + context->set_max_id_bound(opt_options->max_id_bound_); + auto status = impl_->pass_manager.Run(context.get()); if (status == opt::Pass::Status::SuccessWithChange || (status == opt::Pass::Status::SuccessWithoutChange && @@ -620,6 +639,16 @@ Optimizer::PassToken CreateAggressiveDCEPass() { MakeUnique()); } +Optimizer::PassToken CreatePropagateLineInfoPass() { + return MakeUnique( + MakeUnique(opt::kLinesPropagateLines)); +} + +Optimizer::PassToken CreateRedundantLineInfoElimPass() { + return MakeUnique( + MakeUnique(opt::kLinesEliminateDeadLines)); +} + Optimizer::PassToken CreateCommonUniformElimPass() { return MakeUnique( MakeUnique()); @@ -749,4 +778,16 @@ Optimizer::PassToken CreateCombineAccessChainsPass() { return MakeUnique( MakeUnique()); } + +Optimizer::PassToken CreateUpgradeMemoryModelPass() { + return MakeUnique( + MakeUnique()); +} + +Optimizer::PassToken CreateInstBindlessCheckPass(uint32_t desc_set, + uint32_t shader_id) { + return MakeUnique( + MakeUnique(desc_set, shader_id)); +} + } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/pass.cpp b/3rdparty/spirv-tools/source/opt/pass.cpp index 4c4a232c6..edcd24516 100644 --- a/3rdparty/spirv-tools/source/opt/pass.cpp +++ b/3rdparty/spirv-tools/source/opt/pass.cpp @@ -23,85 +23,12 @@ namespace opt { namespace { -const uint32_t kEntryPointFunctionIdInIdx = 1; const uint32_t kTypePointerTypeIdInIdx = 1; } // namespace Pass::Pass() : consumer_(nullptr), context_(nullptr), already_run_(false) {} -void Pass::AddCalls(Function* func, std::queue* todo) { - for (auto bi = func->begin(); bi != func->end(); ++bi) - for (auto ii = bi->begin(); ii != bi->end(); ++ii) - if (ii->opcode() == SpvOpFunctionCall) - todo->push(ii->GetSingleWordInOperand(0)); -} - -bool Pass::ProcessEntryPointCallTree(ProcessFunction& pfn, Module* module) { - // Map from function's result id to function - std::unordered_map id2function; - for (auto& fn : *module) id2function[fn.result_id()] = &fn; - - // Collect all of the entry points as the roots. - std::queue roots; - for (auto& e : module->entry_points()) - roots.push(e.GetSingleWordInOperand(kEntryPointFunctionIdInIdx)); - return ProcessCallTreeFromRoots(pfn, id2function, &roots); -} - -bool Pass::ProcessReachableCallTree(ProcessFunction& pfn, - IRContext* irContext) { - // Map from function's result id to function - std::unordered_map id2function; - for (auto& fn : *irContext->module()) id2function[fn.result_id()] = &fn; - - std::queue roots; - - // Add all entry points since they can be reached from outside the module. - for (auto& e : irContext->module()->entry_points()) - roots.push(e.GetSingleWordInOperand(kEntryPointFunctionIdInIdx)); - - // Add all exported functions since they can be reached from outside the - // module. - for (auto& a : irContext->annotations()) { - // TODO: Handle group decorations as well. Currently not generate by any - // front-end, but could be coming. - if (a.opcode() == SpvOp::SpvOpDecorate) { - if (a.GetSingleWordOperand(1) == - SpvDecoration::SpvDecorationLinkageAttributes) { - uint32_t lastOperand = a.NumOperands() - 1; - if (a.GetSingleWordOperand(lastOperand) == - SpvLinkageType::SpvLinkageTypeExport) { - uint32_t id = a.GetSingleWordOperand(0); - if (id2function.count(id) != 0) roots.push(id); - } - } - } - } - - return ProcessCallTreeFromRoots(pfn, id2function, &roots); -} - -bool Pass::ProcessCallTreeFromRoots( - ProcessFunction& pfn, - const std::unordered_map& id2function, - std::queue* roots) { - // Process call tree - bool modified = false; - std::unordered_set done; - - while (!roots->empty()) { - const uint32_t fi = roots->front(); - roots->pop(); - if (done.insert(fi).second) { - Function* fn = id2function.at(fi); - modified = pfn(fn) || modified; - AddCalls(fn, roots); - } - } - return modified; -} - Pass::Status Pass::Run(IRContext* ctx) { if (already_run_) { return Status::Failure; diff --git a/3rdparty/spirv-tools/source/opt/pass.h b/3rdparty/spirv-tools/source/opt/pass.h index df1745099..c95f5022b 100644 --- a/3rdparty/spirv-tools/source/opt/pass.h +++ b/3rdparty/spirv-tools/source/opt/pass.h @@ -17,7 +17,6 @@ #include #include -#include #include #include #include @@ -91,28 +90,6 @@ class Pass { // Returns a pointer to the CFG for current module. CFG* cfg() const { return context()->cfg(); } - // Add to |todo| all ids of functions called in |func|. - void AddCalls(Function* func, std::queue* todo); - - // Applies |pfn| to every function in the call trees that are rooted at the - // entry points. Returns true if any call |pfn| returns true. By convention - // |pfn| should return true if it modified the module. - bool ProcessEntryPointCallTree(ProcessFunction& pfn, Module* module); - - // Applies |pfn| to every function in the call trees rooted at the entry - // points and exported functions. Returns true if any call |pfn| returns - // true. By convention |pfn| should return true if it modified the module. - bool ProcessReachableCallTree(ProcessFunction& pfn, IRContext* irContext); - - // Applies |pfn| to every function in the call trees rooted at the elements of - // |roots|. Returns true if any call to |pfn| returns true. By convention - // |pfn| should return true if it modified the module. After returning - // |roots| will be empty. - bool ProcessCallTreeFromRoots( - ProcessFunction& pfn, - const std::unordered_map& id2function, - std::queue* roots); - // Run the pass on the given |module|. Returns Status::Failure if errors occur // when processing. Returns the corresponding Status::Success if processing is // successful to indicate whether changes are made to the module. If there @@ -145,6 +122,7 @@ class Pass { virtual Status Process() = 0; // Return the next available SSA id and increment it. + // TODO(1841): Handle id overflow. uint32_t TakeNextId() { return context_->TakeNextId(); } private: @@ -159,6 +137,10 @@ class Pass { bool already_run_; }; +inline Pass::Status CombineStatus(Pass::Status a, Pass::Status b) { + return std::min(a, b); +} + } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/passes.h b/3rdparty/spirv-tools/source/opt/passes.h index 42106c8f7..b9f30ae57 100644 --- a/3rdparty/spirv-tools/source/opt/passes.h +++ b/3rdparty/spirv-tools/source/opt/passes.h @@ -36,6 +36,7 @@ #include "source/opt/if_conversion.h" #include "source/opt/inline_exhaustive_pass.h" #include "source/opt/inline_opaque_pass.h" +#include "source/opt/inst_bindless_check_pass.h" #include "source/opt/licm_pass.h" #include "source/opt/local_access_chain_convert_pass.h" #include "source/opt/local_redundancy_elimination.h" @@ -50,17 +51,20 @@ #include "source/opt/merge_return_pass.h" #include "source/opt/null_pass.h" #include "source/opt/private_to_local_pass.h" +#include "source/opt/process_lines_pass.h" #include "source/opt/reduce_load_size.h" #include "source/opt/redundancy_elimination.h" #include "source/opt/remove_duplicates_pass.h" #include "source/opt/replace_invalid_opc.h" #include "source/opt/scalar_replacement_pass.h" #include "source/opt/set_spec_constant_default_value_pass.h" +#include "source/opt/simplification_pass.h" #include "source/opt/ssa_rewrite_pass.h" #include "source/opt/strength_reduction_pass.h" #include "source/opt/strip_debug_info_pass.h" #include "source/opt/strip_reflect_info_pass.h" #include "source/opt/unify_const_pass.h" +#include "source/opt/upgrade_memory_model.h" #include "source/opt/vector_dce.h" #include "source/opt/workaround1209.h" diff --git a/3rdparty/spirv-tools/source/opt/pch_source_opt.cpp b/3rdparty/spirv-tools/source/opt/pch_source_opt.cpp new file mode 100644 index 000000000..f45448dc5 --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/pch_source_opt.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_source_opt.h" diff --git a/3rdparty/spirv-tools/source/opt/pch_source_opt.h b/3rdparty/spirv-tools/source/opt/pch_source_opt.h new file mode 100644 index 000000000..73566510e --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/pch_source_opt.h @@ -0,0 +1,32 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "source/opt/basic_block.h" +#include "source/opt/decoration_manager.h" +#include "source/opt/def_use_manager.h" +#include "source/opt/ir_context.h" +#include "source/opt/mem_pass.h" +#include "source/opt/module.h" +#include "source/opt/pass.h" +#include "source/util/hex_float.h" +#include "source/util/make_unique.h" diff --git a/3rdparty/spirv-tools/source/opt/private_to_local_pass.h b/3rdparty/spirv-tools/source/opt/private_to_local_pass.h index f706e6e91..467853030 100644 --- a/3rdparty/spirv-tools/source/opt/private_to_local_pass.h +++ b/3rdparty/spirv-tools/source/opt/private_to_local_pass.h @@ -35,7 +35,8 @@ class PrivateToLocalPass : public Pass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/process_lines_pass.cpp b/3rdparty/spirv-tools/source/opt/process_lines_pass.cpp new file mode 100644 index 000000000..0ae2f7583 --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/process_lines_pass.cpp @@ -0,0 +1,157 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/opt/process_lines_pass.h" + +#include +#include +#include + +namespace { + +// Input Operand Indices +static const int kSpvLineFileInIdx = 0; +static const int kSpvLineLineInIdx = 1; +static const int kSpvLineColInIdx = 2; + +} // anonymous namespace + +namespace spvtools { +namespace opt { + +Pass::Status ProcessLinesPass::Process() { + bool modified = ProcessLines(); + return (modified ? Status::SuccessWithChange : Status::SuccessWithoutChange); +} + +bool ProcessLinesPass::ProcessLines() { + bool modified = false; + uint32_t file_id = 0; + uint32_t line = 0; + uint32_t col = 0; + // Process types, globals, constants + for (Instruction& inst : get_module()->types_values()) + modified |= line_process_func_(&inst, &file_id, &line, &col); + // Process functions + for (Function& function : *get_module()) { + modified |= line_process_func_(&function.DefInst(), &file_id, &line, &col); + function.ForEachParam( + [this, &modified, &file_id, &line, &col](Instruction* param) { + modified |= line_process_func_(param, &file_id, &line, &col); + }); + for (BasicBlock& block : function) { + modified |= + line_process_func_(block.GetLabelInst(), &file_id, &line, &col); + for (Instruction& inst : block) { + modified |= line_process_func_(&inst, &file_id, &line, &col); + // Don't process terminal instruction if preceeded by merge + if (inst.opcode() == SpvOpSelectionMerge || + inst.opcode() == SpvOpLoopMerge) + break; + } + // Nullify line info after each block. + file_id = 0; + } + modified |= line_process_func_(function.EndInst(), &file_id, &line, &col); + } + return modified; +} + +bool ProcessLinesPass::PropagateLine(Instruction* inst, uint32_t* file_id, + uint32_t* line, uint32_t* col) { + bool modified = false; + // only the last debug instruction needs to be considered + auto line_itr = inst->dbg_line_insts().rbegin(); + // if no line instructions, propagate previous info + if (line_itr == inst->dbg_line_insts().rend()) { + // if no current line info, add OpNoLine, else OpLine + if (*file_id == 0) + inst->dbg_line_insts().push_back(Instruction(context(), SpvOpNoLine)); + else + inst->dbg_line_insts().push_back(Instruction( + context(), SpvOpLine, 0, 0, + {{spv_operand_type_t::SPV_OPERAND_TYPE_ID, {*file_id}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {*line}}, + {spv_operand_type_t::SPV_OPERAND_TYPE_LITERAL_INTEGER, {*col}}})); + modified = true; + } else { + // else pre-existing line instruction, so update source line info + if (line_itr->opcode() == SpvOpNoLine) { + *file_id = 0; + } else { + assert(line_itr->opcode() == SpvOpLine && "unexpected debug inst"); + *file_id = line_itr->GetSingleWordInOperand(kSpvLineFileInIdx); + *line = line_itr->GetSingleWordInOperand(kSpvLineLineInIdx); + *col = line_itr->GetSingleWordInOperand(kSpvLineColInIdx); + } + } + return modified; +} + +bool ProcessLinesPass::EliminateDeadLines(Instruction* inst, uint32_t* file_id, + uint32_t* line, uint32_t* col) { + // If no debug line instructions, return without modifying lines + if (inst->dbg_line_insts().empty()) return false; + // Only the last debug instruction needs to be considered; delete all others + bool modified = inst->dbg_line_insts().size() > 1; + Instruction last_inst = inst->dbg_line_insts().back(); + inst->dbg_line_insts().clear(); + // If last line is OpNoLine + if (last_inst.opcode() == SpvOpNoLine) { + // If no propagated line info, throw away redundant OpNoLine + if (*file_id == 0) { + modified = true; + // Else replace OpNoLine and propagate no line info + } else { + inst->dbg_line_insts().push_back(last_inst); + *file_id = 0; + } + } else { + // Else last line is OpLine + assert(last_inst.opcode() == SpvOpLine && "unexpected debug inst"); + // If propagated info matches last line, throw away last line + if (*file_id == last_inst.GetSingleWordInOperand(kSpvLineFileInIdx) && + *line == last_inst.GetSingleWordInOperand(kSpvLineLineInIdx) && + *col == last_inst.GetSingleWordInOperand(kSpvLineColInIdx)) { + modified = true; + } else { + // Else replace last line and propagate line info + *file_id = last_inst.GetSingleWordInOperand(kSpvLineFileInIdx); + *line = last_inst.GetSingleWordInOperand(kSpvLineLineInIdx); + *col = last_inst.GetSingleWordInOperand(kSpvLineColInIdx); + inst->dbg_line_insts().push_back(last_inst); + } + } + return modified; +} + +ProcessLinesPass::ProcessLinesPass(uint32_t func_id) { + if (func_id == kLinesPropagateLines) { + line_process_func_ = [this](Instruction* inst, uint32_t* file_id, + uint32_t* line, uint32_t* col) { + return PropagateLine(inst, file_id, line, col); + }; + } else { + assert(func_id == kLinesEliminateDeadLines && "unknown Lines param"); + line_process_func_ = [this](Instruction* inst, uint32_t* file_id, + uint32_t* line, uint32_t* col) { + return EliminateDeadLines(inst, file_id, line, col); + }; + } +} + +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/process_lines_pass.h b/3rdparty/spirv-tools/source/opt/process_lines_pass.h new file mode 100644 index 000000000..c988bfd0d --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/process_lines_pass.h @@ -0,0 +1,87 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// Copyright (c) 2018 Valve Corporation +// Copyright (c) 2018 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_OPT_PROPAGATE_LINES_PASS_H_ +#define SOURCE_OPT_PROPAGATE_LINES_PASS_H_ + +#include "source/opt/function.h" +#include "source/opt/ir_context.h" +#include "source/opt/pass.h" + +namespace spvtools { +namespace opt { + +namespace { + +// Constructor Parameters +static const int kLinesPropagateLines = 0; +static const int kLinesEliminateDeadLines = 1; + +} // anonymous namespace + +// See optimizer.hpp for documentation. +class ProcessLinesPass : public Pass { + using LineProcessFunction = + std::function; + + public: + ProcessLinesPass(uint32_t func_id); + ~ProcessLinesPass() override = default; + + const char* name() const override { return "propagate-lines"; } + + // See optimizer.hpp for this pass' user documentation. + Status Process() override; + + IRContext::Analysis GetPreservedAnalyses() override { + return IRContext::kAnalysisDefUse | + IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | + IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; + } + + private: + // If |inst| has no debug line instruction, create one with + // |file_id, line, col|. If |inst| has debug line instructions, set + // |file_id, line, col| from the last. |file_id| equals 0 indicates no line + // info is available. Return true if |inst| modified. + bool PropagateLine(Instruction* inst, uint32_t* file_id, uint32_t* line, + uint32_t* col); + + // If last debug line instruction of |inst| matches |file_id, line, col|, + // delete all debug line instructions of |inst|. If they do not match, + // replace all debug line instructions of |inst| with new line instruction + // set from |file_id, line, col|. If |inst| has no debug line instructions, + // do not modify |inst|. |file_id| equals 0 indicates no line info is + // available. Return true if |inst| modified. + bool EliminateDeadLines(Instruction* inst, uint32_t* file_id, uint32_t* line, + uint32_t* col); + + // Apply lpfn() to all type, constant, global variable and function + // instructions in their physical order. + bool ProcessLines(); + + // A function that calls either PropagateLine or EliminateDeadLines. + // Initialized by the class constructor. + LineProcessFunction line_process_func_; +}; + +} // namespace opt +} // namespace spvtools + +#endif // SOURCE_OPT_PROPAGATE_LINES_PASS_H_ diff --git a/3rdparty/spirv-tools/source/opt/reduce_load_size.cpp b/3rdparty/spirv-tools/source/opt/reduce_load_size.cpp index b692c6b54..7b5a015c4 100644 --- a/3rdparty/spirv-tools/source/opt/reduce_load_size.cpp +++ b/3rdparty/spirv-tools/source/opt/reduce_load_size.cpp @@ -139,7 +139,8 @@ bool ReduceLoadSize::ShouldReplaceExtract(Instruction* inst) { all_elements_used = !def_use_mgr->WhileEachUser(op_inst, [&elements_used](Instruction* use) { - if (use->opcode() != SpvOpCompositeExtract) { + if (use->opcode() != SpvOpCompositeExtract || + use->NumInOperands() == 1) { return false; } elements_used.insert(use->GetSingleWordInOperand(1)); diff --git a/3rdparty/spirv-tools/source/opt/reduce_load_size.h b/3rdparty/spirv-tools/source/opt/reduce_load_size.h index 724a430bb..ccac49be6 100644 --- a/3rdparty/spirv-tools/source/opt/reduce_load_size.h +++ b/3rdparty/spirv-tools/source/opt/reduce_load_size.h @@ -36,7 +36,8 @@ class ReduceLoadSize : public Pass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisNameMap; + IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisNameMap | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/reflect.h b/3rdparty/spirv-tools/source/opt/reflect.h index fb2de7b15..79d90bda4 100644 --- a/3rdparty/spirv-tools/source/opt/reflect.h +++ b/3rdparty/spirv-tools/source/opt/reflect.h @@ -44,7 +44,8 @@ inline bool IsAnnotationInst(SpvOp opcode) { } inline bool IsTypeInst(SpvOp opcode) { return (opcode >= SpvOpTypeVoid && opcode <= SpvOpTypeForwardPointer) || - opcode == SpvOpTypePipeStorage || opcode == SpvOpTypeNamedBarrier; + opcode == SpvOpTypePipeStorage || opcode == SpvOpTypeNamedBarrier || + opcode == SpvOpTypeAccelerationStructureNV; } inline bool IsConstantInst(SpvOp opcode) { return opcode >= SpvOpConstantTrue && opcode <= SpvOpSpecConstantOp; diff --git a/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp b/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp index d51dd8ef2..80ff68a66 100644 --- a/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp @@ -363,7 +363,7 @@ uint32_t ScalarReplacementPass::GetOrCreatePointerType(uint32_t id) { context()->get_type_mgr()->GetTypeAndPointerType(id, SpvStorageClassFunction); uint32_t ptrId = 0; - if (id == context()->get_type_mgr()->GetId(pointeeTy)) { + if (pointeeTy->IsUniqueType()) { // Non-ambiguous type, just ask the type manager for an id. ptrId = context()->get_type_mgr()->GetTypeInstruction(pointerTy.get()); pointee_to_pointer_[id] = ptrId; @@ -500,6 +500,12 @@ size_t ScalarReplacementPass::GetNumElements(const Instruction* type) const { return len; } +bool ScalarReplacementPass::IsSpecConstant(uint32_t id) const { + const Instruction* inst = get_def_use_mgr()->GetDef(id); + assert(inst); + return spvOpcodeIsSpecConstant(inst->opcode()); +} + Instruction* ScalarReplacementPass::GetStorageType( const Instruction* inst) const { assert(inst->opcode() == SpvOpVariable); @@ -536,7 +542,12 @@ bool ScalarReplacementPass::CheckType(const Instruction* typeInst) const { return false; return true; case SpvOpTypeArray: - if (IsLargerThanSizeLimit(GetArrayLength(typeInst))) return false; + if (IsSpecConstant(typeInst->GetSingleWordInOperand(1u))) { + return false; + } + if (IsLargerThanSizeLimit(GetArrayLength(typeInst))) { + return false; + } return true; // TODO(alanbaker): Develop some heuristics for when this should be // re-enabled. @@ -740,8 +751,10 @@ ScalarReplacementPass::GetUsedComponents(Instruction* inst) { return false; } } + case SpvOpName: + case SpvOpMemberName: case SpvOpStore: - // No components are used. Things are just stored to. + // No components are used. return true; case SpvOpAccessChain: case SpvOpInBoundsAccessChain: { diff --git a/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h b/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h index c89bbc401..f5d761278 100644 --- a/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h +++ b/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h @@ -52,7 +52,8 @@ class ScalarReplacementPass : public Pass { return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | - IRContext::kAnalysisCFG | IRContext::kAnalysisNameMap; + IRContext::kAnalysisCFG | IRContext::kAnalysisNameMap | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: @@ -169,6 +170,11 @@ class ScalarReplacementPass : public Pass { // |type| must be a vector or matrix type. size_t GetNumElements(const Instruction* type) const; + // Returns true if |id| is a specialization constant. + // + // |id| must be registered definition. + bool IsSpecConstant(uint32_t id) const; + // Returns an id for a pointer to |id|. uint32_t GetOrCreatePointerType(uint32_t id); diff --git a/3rdparty/spirv-tools/source/opt/simplification_pass.h b/3rdparty/spirv-tools/source/opt/simplification_pass.h index 348c96a03..bcb88bfcd 100644 --- a/3rdparty/spirv-tools/source/opt/simplification_pass.h +++ b/3rdparty/spirv-tools/source/opt/simplification_pass.h @@ -33,7 +33,8 @@ class SimplificationPass : public Pass { IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisNameMap; + IRContext::kAnalysisNameMap | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/opt/ssa_rewrite_pass.cpp b/3rdparty/spirv-tools/source/opt/ssa_rewrite_pass.cpp index 83d243311..f2cb2da28 100644 --- a/3rdparty/spirv-tools/source/opt/ssa_rewrite_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/ssa_rewrite_pass.cpp @@ -90,6 +90,7 @@ std::string SSARewriter::PhiCandidate::PrettyPrint(const CFG* cfg) const { SSARewriter::PhiCandidate& SSARewriter::CreatePhiCandidate(uint32_t var_id, BasicBlock* bb) { + // TODO(1841): Handle id overflow. uint32_t phi_result_id = pass_->context()->TakeNextId(); auto result = phi_candidates_.emplace( phi_result_id, PhiCandidate(var_id, phi_result_id, bb)); @@ -434,12 +435,22 @@ bool SSARewriter::ApplyReplacements() { pass_->get_def_use_mgr()->GetDef(phi_candidate->var_id())); std::vector phi_operands; uint32_t arg_ix = 0; + std::unordered_map already_seen; for (uint32_t pred_label : pass_->cfg()->preds(phi_candidate->bb()->id())) { uint32_t op_val_id = GetPhiArgument(phi_candidate, arg_ix++); - phi_operands.push_back( - {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {op_val_id}}); - phi_operands.push_back( - {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {pred_label}}); + if (already_seen.count(pred_label) == 0) { + phi_operands.push_back( + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {op_val_id}}); + phi_operands.push_back( + {spv_operand_type_t::SPV_OPERAND_TYPE_ID, {pred_label}}); + already_seen[pred_label] = op_val_id; + } else { + // It is possible that there are two edges from the same parent block. + // Since the OpPhi can have only one entry for each parent, we have to + // make sure the two edges are consistent with each other. + assert(already_seen[pred_label] == op_val_id && + "Inconsistent value for duplicate edges."); + } } // Generate a new OpPhi instruction and insert it in its basic @@ -452,7 +463,6 @@ bool SSARewriter::ApplyReplacements() { pass_->context()->set_instr_block(&*phi_inst, phi_candidate->bb()); auto insert_it = phi_candidate->bb()->begin(); insert_it.InsertBefore(std::move(phi_inst)); - pass_->context()->get_decoration_mgr()->CloneDecorations( phi_candidate->var_id(), phi_candidate->result_id(), {SpvDecorationRelaxedPrecision}); diff --git a/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.cpp b/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.cpp index 14ce31ff3..984073f9d 100644 --- a/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.cpp +++ b/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.cpp @@ -39,6 +39,14 @@ Pass::Status StripReflectInfoPass::Process() { } break; + case SpvOpMemberDecorateStringGOOGLE: + if (inst.GetSingleWordInOperand(2) == SpvDecorationHlslSemanticGOOGLE) { + to_remove.push_back(&inst); + } else { + other_uses_for_decorate_string = true; + } + break; + case SpvOpDecorateId: if (inst.GetSingleWordInOperand(1) == SpvDecorationHlslCounterBufferGOOGLE) { diff --git a/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.h b/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.h index 935a605e3..4e1999ed3 100644 --- a/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.h +++ b/3rdparty/spirv-tools/source/opt/strip_reflect_info_pass.h @@ -33,7 +33,8 @@ class StripReflectInfoPass : public Pass { return IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisCombinators | IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | - IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisNameMap; + IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisNameMap | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } }; diff --git a/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.cpp b/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.cpp new file mode 100644 index 000000000..d78ec560e --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.cpp @@ -0,0 +1,128 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/opt/struct_cfg_analysis.h" + +#include "source/opt/ir_context.h" + +namespace { +const uint32_t kMergeNodeIndex = 0; +const uint32_t kContinueNodeIndex = 1; +} + +namespace spvtools { +namespace opt { + +StructuredCFGAnalysis::StructuredCFGAnalysis(IRContext* ctx) : context_(ctx) { + // If this is not a shader, there are no merge instructions, and not + // structured CFG to analyze. + if (!context_->get_feature_mgr()->HasCapability(SpvCapabilityShader)) { + return; + } + + for (auto& func : *context_->module()) { + AddBlocksInFunction(&func); + } +} + +void StructuredCFGAnalysis::AddBlocksInFunction(Function* func) { + std::list order; + context_->cfg()->ComputeStructuredOrder(func, &*func->begin(), &order); + + struct TraversalInfo { + ConstructInfo cinfo; + uint32_t merge_node; + }; + + // Set up a stack to keep track of currently active constructs. + std::vector state; + state.emplace_back(); + state[0].cinfo.containing_construct = 0; + state[0].cinfo.containing_loop = 0; + state[0].merge_node = 0; + + for (BasicBlock* block : order) { + if (context_->cfg()->IsPseudoEntryBlock(block) || + context_->cfg()->IsPseudoExitBlock(block)) { + continue; + } + + if (block->id() == state.back().merge_node) { + state.pop_back(); + } + + bb_to_construct_.emplace(std::make_pair(block->id(), state.back().cinfo)); + + if (Instruction* merge_inst = block->GetMergeInst()) { + TraversalInfo new_state; + new_state.merge_node = + merge_inst->GetSingleWordInOperand(kMergeNodeIndex); + new_state.cinfo.containing_construct = block->id(); + + if (merge_inst->opcode() == SpvOpLoopMerge) { + new_state.cinfo.containing_loop = block->id(); + } else { + new_state.cinfo.containing_loop = state.back().cinfo.containing_loop; + } + + state.emplace_back(new_state); + merge_blocks_.Set(new_state.merge_node); + } + } +} + +uint32_t StructuredCFGAnalysis::MergeBlock(uint32_t bb_id) { + uint32_t header_id = ContainingConstruct(bb_id); + if (header_id == 0) { + return 0; + } + + BasicBlock* header = context_->cfg()->block(header_id); + Instruction* merge_inst = header->GetMergeInst(); + return merge_inst->GetSingleWordInOperand(kMergeNodeIndex); +} + +uint32_t StructuredCFGAnalysis::LoopMergeBlock(uint32_t bb_id) { + uint32_t header_id = ContainingLoop(bb_id); + if (header_id == 0) { + return 0; + } + + BasicBlock* header = context_->cfg()->block(header_id); + Instruction* merge_inst = header->GetMergeInst(); + return merge_inst->GetSingleWordInOperand(kMergeNodeIndex); +} + +uint32_t StructuredCFGAnalysis::LoopContinueBlock(uint32_t bb_id) { + uint32_t header_id = ContainingLoop(bb_id); + if (header_id == 0) { + return 0; + } + + BasicBlock* header = context_->cfg()->block(header_id); + Instruction* merge_inst = header->GetMergeInst(); + return merge_inst->GetSingleWordInOperand(kContinueNodeIndex); +} + +bool StructuredCFGAnalysis::IsContinueBlock(uint32_t bb_id) { + assert(bb_id != 0); + return LoopContinueBlock(bb_id) == bb_id; +} + +bool StructuredCFGAnalysis::IsMergeBlock(uint32_t bb_id) { + return merge_blocks_.Get(bb_id); +} + +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.h b/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.h new file mode 100644 index 000000000..ef0229d05 --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/struct_cfg_analysis.h @@ -0,0 +1,101 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_OPT_STRUCT_CFG_ANALYSIS_H_ +#define SOURCE_OPT_STRUCT_CFG_ANALYSIS_H_ + +#include + +#include "source/opt/function.h" +#include "source/util/bit_vector.h" + +namespace spvtools { +namespace opt { + +class IRContext; + +// An analysis that, for each basic block, finds the constructs in which it is +// contained, so we can easily get headers and merge nodes. +class StructuredCFGAnalysis { + public: + explicit StructuredCFGAnalysis(IRContext* ctx); + + // Returns the id of the header of the innermost merge construct + // that contains |bb_id|. Returns |0| if |bb_id| is not contained in any + // merge construct. + uint32_t ContainingConstruct(uint32_t bb_id) { + auto it = bb_to_construct_.find(bb_id); + if (it == bb_to_construct_.end()) { + return 0; + } + return it->second.containing_construct; + } + + // Returns the id of the merge block of the innermost merge construct + // that contains |bb_id|. Returns |0| if |bb_id| is not contained in any + // merge construct. + uint32_t MergeBlock(uint32_t bb_id); + + // Returns the id of the header of the innermost loop construct + // that contains |bb_id|. Return |0| if |bb_id| is not contained in any loop + // construct. + uint32_t ContainingLoop(uint32_t bb_id) { + auto it = bb_to_construct_.find(bb_id); + if (it == bb_to_construct_.end()) { + return 0; + } + return it->second.containing_loop; + } + + // Returns the id of the merge block of the innermost loop construct + // that contains |bb_id|. Return |0| if |bb_id| is not contained in any loop + // construct. + uint32_t LoopMergeBlock(uint32_t bb_id); + + // Returns the id of the continue block of the innermost loop construct + // that contains |bb_id|. Return |0| if |bb_id| is not contained in any loop + // construct. + uint32_t LoopContinueBlock(uint32_t bb_id); + + bool IsContinueBlock(uint32_t bb_id); + bool IsMergeBlock(uint32_t bb_id); + + private: + // Struct used to hold the information for a basic block. + // |containing_construct| is the header for the innermost containing + // construct, or 0 if no such construct exists. It could be a selection + // construct or a loop construct. |containing_loop| is the innermost + // containing loop construct, or 0 if the basic bloc is not in a loop. If the + // basic block is in a selection construct that is contained in a loop + // construct, then these two values will not be the same. + struct ConstructInfo { + uint32_t containing_construct; + uint32_t containing_loop; + }; + + // Populates |bb_to_construct_| with the innermost containing merge and loop + // constructs for each basic block in |func|. + void AddBlocksInFunction(Function* func); + + IRContext* context_; + + // A map from a basic block to the headers of its inner most containing + // constructs. + std::unordered_map bb_to_construct_; + utils::BitVector merge_blocks_; +}; + +} // namespace opt +} // namespace spvtools +#endif // SOURCE_OPT_STRUCT_CFG_ANALYSIS_H_ diff --git a/3rdparty/spirv-tools/source/opt/type_manager.cpp b/3rdparty/spirv-tools/source/opt/type_manager.cpp index bd5221b04..001883cad 100644 --- a/3rdparty/spirv-tools/source/opt/type_manager.cpp +++ b/3rdparty/spirv-tools/source/opt/type_manager.cpp @@ -59,7 +59,9 @@ std::pair> TypeManager::GetTypeAndPointerType( uint32_t TypeManager::GetId(const Type* type) const { auto iter = type_to_id_.find(type); - if (iter != type_to_id_.end()) return (*iter).second; + if (iter != type_to_id_.end()) { + return (*iter).second; + } return 0; } @@ -203,6 +205,7 @@ uint32_t TypeManager::GetTypeInstruction(const Type* type) { if (id != 0) return id; std::unique_ptr typeInst; + // TODO(1841): Handle id overflow. id = context()->TakeNextId(); RegisterType(id, *type); switch (type->kind()) { @@ -220,6 +223,7 @@ uint32_t TypeManager::GetTypeInstruction(const Type* type) { DefineParameterlessCase(Queue); DefineParameterlessCase(PipeStorage); DefineParameterlessCase(NamedBarrier); + DefineParameterlessCase(AccelerationStructureNV); #undef DefineParameterlessCase case Type::kInteger: typeInst = MakeUnique( @@ -395,6 +399,7 @@ uint32_t TypeManager::FindPointerToType(uint32_t type_id, } // Must create the pointer type. + // TODO(1841): Handle id overflow. uint32_t resultId = context()->TakeNextId(); std::unique_ptr type_inst( new Instruction(context(), SpvOpTypePointer, 0, resultId, @@ -465,6 +470,7 @@ Type* TypeManager::RebuildType(const Type& type) { DefineNoSubtypeCase(Pipe); DefineNoSubtypeCase(PipeStorage); DefineNoSubtypeCase(NamedBarrier); + DefineNoSubtypeCase(AccelerationStructureNV); #undef DefineNoSubtypeCase case Type::kVector: { const Vector* vec_ty = type.AsVector(); @@ -738,6 +744,9 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) { case SpvOpTypeNamedBarrier: type = new NamedBarrier(); break; + case SpvOpTypeAccelerationStructureNV: + type = new AccelerationStructureNV(); + break; default: SPIRV_UNIMPLEMENTED(consumer_, "unhandled type"); break; diff --git a/3rdparty/spirv-tools/source/opt/types.cpp b/3rdparty/spirv-tools/source/opt/types.cpp index 15cff5486..cfafc7dce 100644 --- a/3rdparty/spirv-tools/source/opt/types.cpp +++ b/3rdparty/spirv-tools/source/opt/types.cpp @@ -123,6 +123,7 @@ std::unique_ptr Type::Clone() const { DeclareKindCase(ForwardPointer); DeclareKindCase(PipeStorage); DeclareKindCase(NamedBarrier); + DeclareKindCase(AccelerationStructureNV); #undef DeclareKindCase default: assert(false && "Unhandled type"); @@ -166,6 +167,7 @@ bool Type::operator==(const Type& other) const { DeclareKindCase(ForwardPointer); DeclareKindCase(PipeStorage); DeclareKindCase(NamedBarrier); + DeclareKindCase(AccelerationStructureNV); #undef DeclareKindCase default: assert(false && "Unhandled type"); @@ -214,6 +216,7 @@ void Type::GetHashWords(std::vector* words, DeclareKindCase(ForwardPointer); DeclareKindCase(PipeStorage); DeclareKindCase(NamedBarrier); + DeclareKindCase(AccelerationStructureNV); #undef DeclareKindCase default: assert(false && "Unhandled type"); @@ -548,12 +551,10 @@ void Pointer::GetExtraHashWords(std::vector* words, void Pointer::SetPointeeType(const Type* type) { pointee_type_ = type; } Function::Function(Type* ret_type, const std::vector& params) - : Type(kFunction), return_type_(ret_type), param_types_(params) { - for (auto* t : params) { - (void)t; - assert(!t->AsVoid()); - } -} + : Type(kFunction), return_type_(ret_type), param_types_(params) {} + +Function::Function(Type* ret_type, std::vector& params) + : Type(kFunction), return_type_(ret_type), param_types_(params) {} bool Function::IsSameImpl(const Type* that, IsSameCache* seen) const { const Function* ft = that->AsFunction(); diff --git a/3rdparty/spirv-tools/source/opt/types.h b/3rdparty/spirv-tools/source/opt/types.h index 625f342a6..fe0f39af3 100644 --- a/3rdparty/spirv-tools/source/opt/types.h +++ b/3rdparty/spirv-tools/source/opt/types.h @@ -56,6 +56,7 @@ class Pipe; class ForwardPointer; class PipeStorage; class NamedBarrier; +class AccelerationStructureNV; // Abstract class for a SPIR-V type. It has a bunch of As() methods, // which is used as a way to probe the actual . @@ -90,6 +91,7 @@ class Type { kForwardPointer, kPipeStorage, kNamedBarrier, + kAccelerationStructureNV, }; Type(Kind k) : kind_(k) {} @@ -170,6 +172,7 @@ class Type { DeclareCastMethod(ForwardPointer); DeclareCastMethod(PipeStorage); DeclareCastMethod(NamedBarrier); + DeclareCastMethod(AccelerationStructureNV); #undef DeclareCastMethod bool operator==(const Type& other) const; @@ -491,6 +494,7 @@ class Pointer : public Type { class Function : public Type { public: Function(Type* ret_type, const std::vector& params); + Function(Type* ret_type, std::vector& params); Function(const Function&) = default; std::string str() const override; @@ -594,6 +598,7 @@ DefineParameterlessType(ReserveId, reserve_id); DefineParameterlessType(Queue, queue); DefineParameterlessType(PipeStorage, pipe_storage); DefineParameterlessType(NamedBarrier, named_barrier); +DefineParameterlessType(AccelerationStructureNV, accelerationStructureNV); #undef DefineParameterlessType } // namespace analysis diff --git a/3rdparty/spirv-tools/source/opt/upgrade_memory_model.cpp b/3rdparty/spirv-tools/source/opt/upgrade_memory_model.cpp new file mode 100644 index 000000000..8def55f5a --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/upgrade_memory_model.cpp @@ -0,0 +1,585 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "upgrade_memory_model.h" + +#include + +#include "source/opt/ir_context.h" +#include "source/util/make_unique.h" + +namespace spvtools { +namespace opt { + +Pass::Status UpgradeMemoryModel::Process() { + // Only update Logical GLSL450 to Logical VulkanKHR. + Instruction* memory_model = get_module()->GetMemoryModel(); + if (memory_model->GetSingleWordInOperand(0u) != SpvAddressingModelLogical || + memory_model->GetSingleWordInOperand(1u) != SpvMemoryModelGLSL450) { + return Pass::Status::SuccessWithoutChange; + } + + UpgradeMemoryModelInstruction(); + UpgradeInstructions(); + CleanupDecorations(); + UpgradeBarriers(); + UpgradeMemoryScope(); + + return Pass::Status::SuccessWithChange; +} + +void UpgradeMemoryModel::UpgradeMemoryModelInstruction() { + // Overall changes necessary: + // 1. Add the OpExtension. + // 2. Add the OpCapability. + // 3. Modify the memory model. + Instruction* memory_model = get_module()->GetMemoryModel(); + get_module()->AddCapability(MakeUnique( + context(), SpvOpCapability, 0, 0, + std::initializer_list{ + {SPV_OPERAND_TYPE_CAPABILITY, {SpvCapabilityVulkanMemoryModelKHR}}})); + const std::string extension = "SPV_KHR_vulkan_memory_model"; + std::vector words(extension.size() / 4 + 1, 0); + char* dst = reinterpret_cast(words.data()); + strncpy(dst, extension.c_str(), extension.size()); + get_module()->AddExtension( + MakeUnique(context(), SpvOpExtension, 0, 0, + std::initializer_list{ + {SPV_OPERAND_TYPE_LITERAL_STRING, words}})); + memory_model->SetInOperand(1u, {SpvMemoryModelVulkanKHR}); +} + +void UpgradeMemoryModel::UpgradeInstructions() { + // Coherent and Volatile decorations are deprecated. Remove them and replace + // with flags on the memory/image operations. The decorations can occur on + // OpVariable, OpFunctionParameter (of pointer type) and OpStructType (member + // decoration). Trace from the decoration target(s) to the final memory/image + // instructions. Additionally, Workgroup storage class variables and function + // parameters are implicitly coherent in GLSL450. + + for (auto& func : *get_module()) { + func.ForEachInst([this](Instruction* inst) { + bool is_coherent = false; + bool is_volatile = false; + bool src_coherent = false; + bool src_volatile = false; + bool dst_coherent = false; + bool dst_volatile = false; + SpvScope scope = SpvScopeQueueFamilyKHR; + SpvScope src_scope = SpvScopeQueueFamilyKHR; + SpvScope dst_scope = SpvScopeQueueFamilyKHR; + switch (inst->opcode()) { + case SpvOpLoad: + case SpvOpStore: + std::tie(is_coherent, is_volatile, scope) = + GetInstructionAttributes(inst->GetSingleWordInOperand(0u)); + break; + case SpvOpImageRead: + case SpvOpImageSparseRead: + case SpvOpImageWrite: + std::tie(is_coherent, is_volatile, scope) = + GetInstructionAttributes(inst->GetSingleWordInOperand(0u)); + break; + case SpvOpCopyMemory: + case SpvOpCopyMemorySized: + std::tie(dst_coherent, dst_volatile, dst_scope) = + GetInstructionAttributes(inst->GetSingleWordInOperand(0u)); + std::tie(src_coherent, src_volatile, src_scope) = + GetInstructionAttributes(inst->GetSingleWordInOperand(1u)); + break; + default: + break; + } + + switch (inst->opcode()) { + case SpvOpLoad: + UpgradeFlags(inst, 1u, is_coherent, is_volatile, kAvailability, + kMemory); + break; + case SpvOpStore: + UpgradeFlags(inst, 2u, is_coherent, is_volatile, kVisibility, + kMemory); + break; + case SpvOpCopyMemory: + UpgradeFlags(inst, 2u, dst_coherent, dst_volatile, kAvailability, + kMemory); + UpgradeFlags(inst, 2u, src_coherent, src_volatile, kVisibility, + kMemory); + break; + case SpvOpCopyMemorySized: + UpgradeFlags(inst, 3u, dst_coherent, dst_volatile, kAvailability, + kMemory); + UpgradeFlags(inst, 3u, src_coherent, src_volatile, kVisibility, + kMemory); + break; + case SpvOpImageRead: + case SpvOpImageSparseRead: + UpgradeFlags(inst, 2u, is_coherent, is_volatile, kAvailability, + kImage); + break; + case SpvOpImageWrite: + UpgradeFlags(inst, 3u, is_coherent, is_volatile, kVisibility, kImage); + break; + default: + break; + } + + // |is_coherent| is never used for the same instructions as + // |src_coherent| and |dst_coherent|. + if (is_coherent) { + inst->AddOperand( + {SPV_OPERAND_TYPE_SCOPE_ID, {GetScopeConstant(scope)}}); + } + // According to SPV_KHR_vulkan_memory_model, if both available and + // visible flags are used the first scope operand is for availability + // (reads) and the second is for visibiity (writes). + if (src_coherent) { + inst->AddOperand( + {SPV_OPERAND_TYPE_SCOPE_ID, {GetScopeConstant(src_scope)}}); + } + if (dst_coherent) { + inst->AddOperand( + {SPV_OPERAND_TYPE_SCOPE_ID, {GetScopeConstant(dst_scope)}}); + } + }); + } +} + +std::tuple UpgradeMemoryModel::GetInstructionAttributes( + uint32_t id) { + // |id| is a pointer used in a memory/image instruction. Need to determine if + // that pointer points to volatile or coherent memory. Workgroup storage + // class is implicitly coherent and cannot be decorated with volatile, so + // short circuit that case. + Instruction* inst = context()->get_def_use_mgr()->GetDef(id); + analysis::Type* type = context()->get_type_mgr()->GetType(inst->type_id()); + if (type->AsPointer() && + type->AsPointer()->storage_class() == SpvStorageClassWorkgroup) { + return std::make_tuple(true, false, SpvScopeWorkgroup); + } + + bool is_coherent = false; + bool is_volatile = false; + std::unordered_set visited; + std::tie(is_coherent, is_volatile) = + TraceInstruction(context()->get_def_use_mgr()->GetDef(id), + std::vector(), &visited); + + return std::make_tuple(is_coherent, is_volatile, SpvScopeQueueFamilyKHR); +} + +std::pair UpgradeMemoryModel::TraceInstruction( + Instruction* inst, std::vector indices, + std::unordered_set* visited) { + auto iter = cache_.find(std::make_pair(inst->result_id(), indices)); + if (iter != cache_.end()) { + return iter->second; + } + + if (!visited->insert(inst->result_id()).second) { + return std::make_pair(false, false); + } + + // Initialize the cache before |indices| is (potentially) modified. + auto& cached_result = cache_[std::make_pair(inst->result_id(), indices)]; + cached_result.first = false; + cached_result.second = false; + + bool is_coherent = false; + bool is_volatile = false; + switch (inst->opcode()) { + case SpvOpVariable: + case SpvOpFunctionParameter: + is_coherent |= HasDecoration(inst, 0, SpvDecorationCoherent); + is_volatile |= HasDecoration(inst, 0, SpvDecorationVolatile); + if (!is_coherent || !is_volatile) { + bool type_coherent = false; + bool type_volatile = false; + std::tie(type_coherent, type_volatile) = + CheckType(inst->type_id(), indices); + is_coherent |= type_coherent; + is_volatile |= type_volatile; + } + break; + case SpvOpAccessChain: + case SpvOpInBoundsAccessChain: + // Store indices in reverse order. + for (uint32_t i = inst->NumInOperands() - 1; i > 0; --i) { + indices.push_back(inst->GetSingleWordInOperand(i)); + } + break; + case SpvOpPtrAccessChain: + // Store indices in reverse order. Skip the |Element| operand. + for (uint32_t i = inst->NumInOperands() - 1; i > 1; --i) { + indices.push_back(inst->GetSingleWordInOperand(i)); + } + break; + default: + break; + } + + // No point searching further. + if (is_coherent && is_volatile) { + cached_result.first = true; + cached_result.second = true; + return std::make_pair(true, true); + } + + // Variables and function parameters are sources. Continue searching until we + // reach them. + if (inst->opcode() != SpvOpVariable && + inst->opcode() != SpvOpFunctionParameter) { + inst->ForEachInId([this, &is_coherent, &is_volatile, &indices, + &visited](const uint32_t* id_ptr) { + Instruction* op_inst = context()->get_def_use_mgr()->GetDef(*id_ptr); + const analysis::Type* type = + context()->get_type_mgr()->GetType(op_inst->type_id()); + if (type && + (type->AsPointer() || type->AsImage() || type->AsSampledImage())) { + bool operand_coherent = false; + bool operand_volatile = false; + std::tie(operand_coherent, operand_volatile) = + TraceInstruction(op_inst, indices, visited); + is_coherent |= operand_coherent; + is_volatile |= operand_volatile; + } + }); + } + + cached_result.first = is_coherent; + cached_result.second = is_volatile; + return std::make_pair(is_coherent, is_volatile); +} + +std::pair UpgradeMemoryModel::CheckType( + uint32_t type_id, const std::vector& indices) { + bool is_coherent = false; + bool is_volatile = false; + Instruction* type_inst = context()->get_def_use_mgr()->GetDef(type_id); + assert(type_inst->opcode() == SpvOpTypePointer); + Instruction* element_inst = context()->get_def_use_mgr()->GetDef( + type_inst->GetSingleWordInOperand(1u)); + for (int i = (int)indices.size() - 1; i >= 0; --i) { + if (is_coherent && is_volatile) break; + + if (element_inst->opcode() == SpvOpTypePointer) { + element_inst = context()->get_def_use_mgr()->GetDef( + element_inst->GetSingleWordInOperand(1u)); + } else if (element_inst->opcode() == SpvOpTypeStruct) { + uint32_t index = indices.at(i); + Instruction* index_inst = context()->get_def_use_mgr()->GetDef(index); + assert(index_inst->opcode() == SpvOpConstant); + uint64_t value = GetIndexValue(index_inst); + is_coherent |= HasDecoration(element_inst, static_cast(value), + SpvDecorationCoherent); + is_volatile |= HasDecoration(element_inst, static_cast(value), + SpvDecorationVolatile); + element_inst = context()->get_def_use_mgr()->GetDef( + element_inst->GetSingleWordInOperand(static_cast(value))); + } else { + assert(spvOpcodeIsComposite(element_inst->opcode())); + element_inst = context()->get_def_use_mgr()->GetDef( + element_inst->GetSingleWordInOperand(1u)); + } + } + + if (!is_coherent || !is_volatile) { + bool remaining_coherent = false; + bool remaining_volatile = false; + std::tie(remaining_coherent, remaining_volatile) = + CheckAllTypes(element_inst); + is_coherent |= remaining_coherent; + is_volatile |= remaining_volatile; + } + + return std::make_pair(is_coherent, is_volatile); +} + +std::pair UpgradeMemoryModel::CheckAllTypes( + const Instruction* inst) { + std::unordered_set visited; + std::vector stack; + stack.push_back(inst); + + bool is_coherent = false; + bool is_volatile = false; + while (!stack.empty()) { + const Instruction* def = stack.back(); + stack.pop_back(); + + if (!visited.insert(def).second) continue; + + if (def->opcode() == SpvOpTypeStruct) { + // Any member decorated with coherent and/or volatile is enough to have + // the related operation be flagged as coherent and/or volatile. + is_coherent |= HasDecoration(def, std::numeric_limits::max(), + SpvDecorationCoherent); + is_volatile |= HasDecoration(def, std::numeric_limits::max(), + SpvDecorationVolatile); + if (is_coherent && is_volatile) + return std::make_pair(is_coherent, is_volatile); + + // Check the subtypes. + for (uint32_t i = 0; i < def->NumInOperands(); ++i) { + stack.push_back(context()->get_def_use_mgr()->GetDef( + def->GetSingleWordInOperand(i))); + } + } else if (spvOpcodeIsComposite(def->opcode())) { + stack.push_back(context()->get_def_use_mgr()->GetDef( + def->GetSingleWordInOperand(0u))); + } else if (def->opcode() == SpvOpTypePointer) { + stack.push_back(context()->get_def_use_mgr()->GetDef( + def->GetSingleWordInOperand(1u))); + } + } + + return std::make_pair(is_coherent, is_volatile); +} + +uint64_t UpgradeMemoryModel::GetIndexValue(Instruction* index_inst) { + const analysis::Constant* index_constant = + context()->get_constant_mgr()->GetConstantFromInst(index_inst); + assert(index_constant->AsIntConstant()); + if (index_constant->type()->AsInteger()->IsSigned()) { + if (index_constant->type()->AsInteger()->width() == 32) { + return index_constant->GetS32(); + } else { + return index_constant->GetS64(); + } + } else { + if (index_constant->type()->AsInteger()->width() == 32) { + return index_constant->GetU32(); + } else { + return index_constant->GetU64(); + } + } +} + +bool UpgradeMemoryModel::HasDecoration(const Instruction* inst, uint32_t value, + SpvDecoration decoration) { + // If the iteration was terminated early then an appropriate decoration was + // found. + return !context()->get_decoration_mgr()->WhileEachDecoration( + inst->result_id(), decoration, [value](const Instruction& i) { + if (i.opcode() == SpvOpDecorate || i.opcode() == SpvOpDecorateId) { + return false; + } else if (i.opcode() == SpvOpMemberDecorate) { + if (value == i.GetSingleWordInOperand(1u) || + value == std::numeric_limits::max()) + return false; + } + + return true; + }); +} + +void UpgradeMemoryModel::UpgradeFlags(Instruction* inst, uint32_t in_operand, + bool is_coherent, bool is_volatile, + OperationType operation_type, + InstructionType inst_type) { + if (!is_coherent && !is_volatile) return; + + uint32_t flags = 0; + if (inst->NumInOperands() > in_operand) { + flags |= inst->GetSingleWordInOperand(in_operand); + } + if (is_coherent) { + if (inst_type == kMemory) { + flags |= SpvMemoryAccessNonPrivatePointerKHRMask; + if (operation_type == kVisibility) { + flags |= SpvMemoryAccessMakePointerVisibleKHRMask; + } else { + flags |= SpvMemoryAccessMakePointerAvailableKHRMask; + } + } else { + flags |= SpvImageOperandsNonPrivateTexelKHRMask; + if (operation_type == kVisibility) { + flags |= SpvImageOperandsMakeTexelVisibleKHRMask; + } else { + flags |= SpvImageOperandsMakeTexelAvailableKHRMask; + } + } + } + + if (is_volatile) { + if (inst_type == kMemory) { + flags |= SpvMemoryAccessVolatileMask; + } else { + flags |= SpvImageOperandsVolatileTexelKHRMask; + } + } + + if (inst->NumInOperands() > in_operand) { + inst->SetInOperand(in_operand, {flags}); + } else if (inst_type == kMemory) { + inst->AddOperand({SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, {flags}}); + } else { + inst->AddOperand({SPV_OPERAND_TYPE_OPTIONAL_IMAGE, {flags}}); + } +} + +uint32_t UpgradeMemoryModel::GetScopeConstant(SpvScope scope) { + analysis::Integer int_ty(32, false); + uint32_t int_id = context()->get_type_mgr()->GetTypeInstruction(&int_ty); + const analysis::Constant* constant = + context()->get_constant_mgr()->GetConstant( + context()->get_type_mgr()->GetType(int_id), + {static_cast(scope)}); + return context() + ->get_constant_mgr() + ->GetDefiningInstruction(constant) + ->result_id(); +} + +void UpgradeMemoryModel::CleanupDecorations() { + // All of the volatile and coherent decorations have been dealt with, so now + // we can just remove them. + get_module()->ForEachInst([this](Instruction* inst) { + if (inst->result_id() != 0) { + context()->get_decoration_mgr()->RemoveDecorationsFrom( + inst->result_id(), [](const Instruction& dec) { + switch (dec.opcode()) { + case SpvOpDecorate: + case SpvOpDecorateId: + if (dec.GetSingleWordInOperand(1u) == SpvDecorationCoherent || + dec.GetSingleWordInOperand(1u) == SpvDecorationVolatile) + return true; + break; + case SpvOpMemberDecorate: + if (dec.GetSingleWordInOperand(2u) == SpvDecorationCoherent || + dec.GetSingleWordInOperand(2u) == SpvDecorationVolatile) + return true; + break; + default: + break; + } + return false; + }); + } + }); +} + +void UpgradeMemoryModel::UpgradeBarriers() { + std::vector barriers; + // Collects all the control barriers in |function|. Returns true if the + // function operates on the Output storage class. + ProcessFunction CollectBarriers = [this, &barriers](Function* function) { + bool operates_on_output = false; + for (auto& block : *function) { + block.ForEachInst([this, &barriers, + &operates_on_output](Instruction* inst) { + if (inst->opcode() == SpvOpControlBarrier) { + barriers.push_back(inst); + } else if (!operates_on_output) { + // This instruction operates on output storage class if it is a + // pointer to output type or any input operand is a pointer to output + // type. + analysis::Type* type = + context()->get_type_mgr()->GetType(inst->type_id()); + if (type && type->AsPointer() && + type->AsPointer()->storage_class() == SpvStorageClassOutput) { + operates_on_output = true; + return; + } + inst->ForEachInId([this, &operates_on_output](uint32_t* id_ptr) { + Instruction* op_inst = + context()->get_def_use_mgr()->GetDef(*id_ptr); + analysis::Type* op_type = + context()->get_type_mgr()->GetType(op_inst->type_id()); + if (op_type && op_type->AsPointer() && + op_type->AsPointer()->storage_class() == SpvStorageClassOutput) + operates_on_output = true; + }); + } + }); + } + return operates_on_output; + }; + + std::queue roots; + for (auto& e : get_module()->entry_points()) + if (e.GetSingleWordInOperand(0u) == SpvExecutionModelTessellationControl) { + roots.push(e.GetSingleWordInOperand(1u)); + if (context()->ProcessCallTreeFromRoots(CollectBarriers, &roots)) { + for (auto barrier : barriers) { + // Add OutputMemoryKHR to the semantics of the barriers. + uint32_t semantics_id = barrier->GetSingleWordInOperand(2u); + Instruction* semantics_inst = + context()->get_def_use_mgr()->GetDef(semantics_id); + analysis::Type* semantics_type = + context()->get_type_mgr()->GetType(semantics_inst->type_id()); + uint64_t semantics_value = GetIndexValue(semantics_inst); + const analysis::Constant* constant = + context()->get_constant_mgr()->GetConstant( + semantics_type, {static_cast(semantics_value) | + SpvMemorySemanticsOutputMemoryKHRMask}); + barrier->SetInOperand(2u, {context() + ->get_constant_mgr() + ->GetDefiningInstruction(constant) + ->result_id()}); + } + } + barriers.clear(); + } +} + +void UpgradeMemoryModel::UpgradeMemoryScope() { + get_module()->ForEachInst([this](Instruction* inst) { + // Don't need to handle all the operations that take a scope. + // * Group operations can only be subgroup + // * Non-uniform can only be workgroup or subgroup + // * Named barriers are not supported by Vulkan + // * Workgroup ops (e.g. async_copy) have at most workgroup scope. + if (spvOpcodeIsAtomicOp(inst->opcode())) { + if (IsDeviceScope(inst->GetSingleWordInOperand(1))) { + inst->SetInOperand(1, {GetScopeConstant(SpvScopeQueueFamilyKHR)}); + } + } else if (inst->opcode() == SpvOpControlBarrier) { + if (IsDeviceScope(inst->GetSingleWordInOperand(1))) { + inst->SetInOperand(1, {GetScopeConstant(SpvScopeQueueFamilyKHR)}); + } + } else if (inst->opcode() == SpvOpMemoryBarrier) { + if (IsDeviceScope(inst->GetSingleWordInOperand(0))) { + inst->SetInOperand(0, {GetScopeConstant(SpvScopeQueueFamilyKHR)}); + } + } + }); +} + +bool UpgradeMemoryModel::IsDeviceScope(uint32_t scope_id) { + const analysis::Constant* constant = + context()->get_constant_mgr()->FindDeclaredConstant(scope_id); + assert(constant && "Memory scope must be a constant"); + + const analysis::Integer* type = constant->type()->AsInteger(); + assert(type); + assert(type->width() == 32 || type->width() == 64); + if (type->width() == 32) { + if (type->IsSigned()) + return static_cast(constant->GetS32()) == SpvScopeDevice; + else + return static_cast(constant->GetU32()) == SpvScopeDevice; + } else { + if (type->IsSigned()) + return static_cast(constant->GetS64()) == SpvScopeDevice; + else + return static_cast(constant->GetU64()) == SpvScopeDevice; + } + + assert(false); + return false; +} + +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/opt/upgrade_memory_model.h b/3rdparty/spirv-tools/source/opt/upgrade_memory_model.h new file mode 100644 index 000000000..29c801c4f --- /dev/null +++ b/3rdparty/spirv-tools/source/opt/upgrade_memory_model.h @@ -0,0 +1,129 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIBSPIRV_OPT_UPGRADE_MEMORY_MODEL_H_ +#define LIBSPIRV_OPT_UPGRADE_MEMORY_MODEL_H_ + +#include "pass.h" + +#include +#include + +namespace spvtools { +namespace opt { + +// Hashing functor for the memoized result store. +struct CacheHash { + size_t operator()( + const std::pair>& item) const { + std::u32string to_hash; + to_hash.push_back(item.first); + for (auto i : item.second) to_hash.push_back(i); + return std::hash()(to_hash); + } +}; + +// Upgrades the memory model from Logical GLSL450 to Logical VulkanKHR. +// +// This pass remove deprecated decorations (Volatile and Coherent) and replaces +// them with new flags on individual instructions. It adds the Output storage +// class semantic to control barriers in tessellation control shaders that have +// an access to Output memory. +class UpgradeMemoryModel : public Pass { + public: + const char* name() const override { return "upgrade-memory-model"; } + Status Process() override; + + private: + // Used to indicate whether the operation performs an availability or + // visibility operation. + enum OperationType { kVisibility, kAvailability }; + + // Used to indicate whether the instruction is a memory or image instruction. + enum InstructionType { kMemory, kImage }; + + // Modifies the OpMemoryModel to use VulkanKHR. Adds the Vulkan memory model + // capability and extension. + void UpgradeMemoryModelInstruction(); + + // Upgrades memory, image and barrier instructions. + // Memory and image instructions convert coherent and volatile decorations + // into flags on the instruction. Barriers in tessellation shaders get the + // output storage semantic if appropriate. + void UpgradeInstructions(); + + // Returns whether |id| is coherent and/or volatile. + std::tuple GetInstructionAttributes(uint32_t id); + + // Traces |inst| to determine if it is coherent and/or volatile. + // |indices| tracks the access chain indices seen so far. + std::pair TraceInstruction(Instruction* inst, + std::vector indices, + std::unordered_set* visited); + + // Return true if |inst| is decorated with |decoration|. + // If |inst| is decorated by member decorations then either |value| must + // match the index or |value| must be a maximum allowable value. The max + // value allows any element to match. + bool HasDecoration(const Instruction* inst, uint32_t value, + SpvDecoration decoration); + + // Returns whether |type_id| indexed via |indices| is coherent and/or + // volatile. + std::pair CheckType(uint32_t type_id, + const std::vector& indices); + + // Returns whether any type/element under |inst| is coherent and/or volatile. + std::pair CheckAllTypes(const Instruction* inst); + + // Modifies the flags of |inst| to include the new flags for the Vulkan + // memory model. |operation_type| indicates whether flags should use + // MakeVisible or MakeAvailable variants. |inst_type| indicates whether the + // Pointer or Texel variants of flags should be used. + void UpgradeFlags(Instruction* inst, uint32_t in_operand, bool is_coherent, + bool is_volatile, OperationType operation_type, + InstructionType inst_type); + + // Returns the result id for a constant for |scope|. + uint32_t GetScopeConstant(SpvScope scope); + + // Returns the value of |index_inst|. |index_inst| must be an OpConstant of + // integer type.g + uint64_t GetIndexValue(Instruction* index_inst); + + // Removes coherent and volatile decorations. + void CleanupDecorations(); + + // For all tessellation control entry points, if there is an operation on + // Output storage class, then all barriers are modified to include the + // OutputMemoryKHR semantic. + void UpgradeBarriers(); + + // If the Vulkan memory model is specified, device scope actually means + // device scope. The memory scope must be modified to be QueueFamilyKHR + // scope. + void UpgradeMemoryScope(); + + // Returns true if |scope_id| is SpvScopeDevice. + bool IsDeviceScope(uint32_t scope_id); + + // Caches the result of TraceInstruction. For a given result id and set of + // indices, stores whether that combination is coherent and/or volatile. + std::unordered_map>, + std::pair, CacheHash> + cache_; +}; +} // namespace opt +} // namespace spvtools +#endif // LIBSPIRV_OPT_UPGRADE_MEMORY_MODEL_H_ diff --git a/3rdparty/spirv-tools/source/opt/vector_dce.cpp b/3rdparty/spirv-tools/source/opt/vector_dce.cpp index 911242e05..314d6513f 100644 --- a/3rdparty/spirv-tools/source/opt/vector_dce.cpp +++ b/3rdparty/spirv-tools/source/opt/vector_dce.cpp @@ -113,30 +113,44 @@ void VectorDCE::MarkInsertUsesAsLive( std::vector* work_list) { analysis::DefUseManager* def_use_mgr = context()->get_def_use_mgr(); - uint32_t insert_position = - current_item.instruction->GetSingleWordInOperand(2); + if (current_item.instruction->NumInOperands() > 2) { + uint32_t insert_position = + current_item.instruction->GetSingleWordInOperand(2); - // Add the elements of the composite object that are used. - uint32_t operand_id = - current_item.instruction->GetSingleWordInOperand(kInsertCompositeIdInIdx); - Instruction* operand_inst = def_use_mgr->GetDef(operand_id); + // Add the elements of the composite object that are used. + uint32_t operand_id = current_item.instruction->GetSingleWordInOperand( + kInsertCompositeIdInIdx); + Instruction* operand_inst = def_use_mgr->GetDef(operand_id); - WorkListItem new_item; - new_item.instruction = operand_inst; - new_item.components = current_item.components; - new_item.components.Clear(insert_position); + WorkListItem new_item; + new_item.instruction = operand_inst; + new_item.components = current_item.components; + new_item.components.Clear(insert_position); - AddItemToWorkListIfNeeded(new_item, live_components, work_list); + AddItemToWorkListIfNeeded(new_item, live_components, work_list); - // Add the element being inserted if it is used. - if (current_item.components.Get(insert_position)) { - uint32_t obj_operand_id = + // Add the element being inserted if it is used. + if (current_item.components.Get(insert_position)) { + uint32_t obj_operand_id = + current_item.instruction->GetSingleWordInOperand( + kInsertObjectIdInIdx); + Instruction* obj_operand_inst = def_use_mgr->GetDef(obj_operand_id); + WorkListItem new_item_for_obj; + new_item_for_obj.instruction = obj_operand_inst; + new_item_for_obj.components.Set(0); + AddItemToWorkListIfNeeded(new_item_for_obj, live_components, work_list); + } + } else { + // If there are no indices, then this is a copy of the object being + // inserted. + uint32_t object_id = current_item.instruction->GetSingleWordInOperand(kInsertObjectIdInIdx); - Instruction* obj_operand_inst = def_use_mgr->GetDef(obj_operand_id); - WorkListItem new_item_for_obj; - new_item_for_obj.instruction = obj_operand_inst; - new_item_for_obj.components.Set(0); - AddItemToWorkListIfNeeded(new_item_for_obj, live_components, work_list); + Instruction* object_inst = def_use_mgr->GetDef(object_id); + + WorkListItem new_item; + new_item.instruction = object_inst; + new_item.components = current_item.components; + AddItemToWorkListIfNeeded(new_item, live_components, work_list); } } @@ -323,14 +337,23 @@ bool VectorDCE::RewriteInstructions( bool VectorDCE::RewriteInsertInstruction( Instruction* current_inst, const utils::BitVector& live_components) { // If the value being inserted is not live, then we can skip the insert. - bool modified = false; + + if (current_inst->NumInOperands() == 2) { + // If there are no indices, then this is the same as a copy. + context()->KillNamesAndDecorates(current_inst->result_id()); + uint32_t object_id = + current_inst->GetSingleWordInOperand(kInsertObjectIdInIdx); + context()->ReplaceAllUsesWith(current_inst->result_id(), object_id); + return true; + } + uint32_t insert_index = current_inst->GetSingleWordInOperand(2); if (!live_components.Get(insert_index)) { - modified = true; context()->KillNamesAndDecorates(current_inst->result_id()); uint32_t composite_id = current_inst->GetSingleWordInOperand(kInsertCompositeIdInIdx); context()->ReplaceAllUsesWith(current_inst->result_id(), composite_id); + return true; } // If the values already in the composite are not used, then replace it with @@ -342,9 +365,10 @@ bool VectorDCE::RewriteInsertInstruction( uint32_t undef_id = Type2Undef(current_inst->type_id()); current_inst->SetInOperand(kInsertCompositeIdInIdx, {undef_id}); context()->AnalyzeUses(current_inst); + return true; } - return modified; + return false; } void VectorDCE::AddItemToWorkListIfNeeded( diff --git a/3rdparty/spirv-tools/source/opt/vector_dce.h b/3rdparty/spirv-tools/source/opt/vector_dce.h index 48886998d..638b34b6a 100644 --- a/3rdparty/spirv-tools/source/opt/vector_dce.h +++ b/3rdparty/spirv-tools/source/opt/vector_dce.h @@ -53,7 +53,8 @@ class VectorDCE : public MemPass { return IRContext::kAnalysisDefUse | IRContext::kAnalysisCFG | IRContext::kAnalysisInstrToBlockMapping | IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisDecorations | - IRContext::kAnalysisDominatorAnalysis | IRContext::kAnalysisNameMap; + IRContext::kAnalysisDominatorAnalysis | IRContext::kAnalysisNameMap | + IRContext::kAnalysisConstants | IRContext::kAnalysisTypes; } private: diff --git a/3rdparty/spirv-tools/source/pch_source.cpp b/3rdparty/spirv-tools/source/pch_source.cpp new file mode 100644 index 000000000..032e29ec4 --- /dev/null +++ b/3rdparty/spirv-tools/source/pch_source.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_source.h" diff --git a/3rdparty/spirv-tools/source/pch_source.h b/3rdparty/spirv-tools/source/pch_source.h new file mode 100644 index 000000000..6695ba268 --- /dev/null +++ b/3rdparty/spirv-tools/source/pch_source.h @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/val/validation_state.h" diff --git a/3rdparty/spirv-tools/source/reduce/CMakeLists.txt b/3rdparty/spirv-tools/source/reduce/CMakeLists.txt new file mode 100644 index 000000000..0a6bce99c --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/CMakeLists.txt @@ -0,0 +1,74 @@ +# Copyright (c) 2018 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +set(SPIRV_TOOLS_REDUCE_SOURCES + change_operand_reduction_opportunity.h + change_operand_to_undef_reduction_opportunity.h + operand_to_const_reduction_pass.h + operand_to_undef_reduction_pass.h + operand_to_dominating_id_reduction_pass.h + reducer.h + reduction_opportunity.h + reduction_pass.h + reduction_util.h + remove_instruction_reduction_opportunity.h + remove_opname_instruction_reduction_pass.h + remove_unreferenced_instruction_reduction_pass.h + structured_loop_to_selection_reduction_opportunity.h + structured_loop_to_selection_reduction_pass.h + + change_operand_reduction_opportunity.cpp + change_operand_to_undef_reduction_opportunity.cpp + operand_to_const_reduction_pass.cpp + operand_to_undef_reduction_pass.cpp + operand_to_dominating_id_reduction_pass.cpp + reducer.cpp + reduction_opportunity.cpp + reduction_pass.cpp + reduction_util.cpp + remove_instruction_reduction_opportunity.cpp + remove_unreferenced_instruction_reduction_pass.cpp + remove_opname_instruction_reduction_pass.cpp + structured_loop_to_selection_reduction_opportunity.cpp + structured_loop_to_selection_reduction_pass.cpp + ) + +if(MSVC) + # Enable parallel builds across four cores for this lib + add_definitions(/MP4) +endif() + +spvtools_pch(SPIRV_TOOLS_REDUCE_SOURCES pch_source_reduce) + +add_library(SPIRV-Tools-reduce ${SPIRV_TOOLS_REDUCE_SOURCES}) + +spvtools_default_compile_options(SPIRV-Tools-reduce) +target_include_directories(SPIRV-Tools-reduce + PUBLIC ${spirv-tools_SOURCE_DIR}/include + PUBLIC ${SPIRV_HEADER_INCLUDE_DIR} + PRIVATE ${spirv-tools_BINARY_DIR} +) +# The reducer reuses a lot of functionality from the SPIRV-Tools library. +target_link_libraries(SPIRV-Tools-reduce + PUBLIC ${SPIRV_TOOLS} + PUBLIC SPIRV-Tools-opt) + +set_property(TARGET SPIRV-Tools-reduce PROPERTY FOLDER "SPIRV-Tools libraries") +spvtools_check_symbol_exports(SPIRV-Tools-reduce) + +if(ENABLE_SPIRV_TOOLS_INSTALL) + install(TARGETS SPIRV-Tools-reduce + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +endif(ENABLE_SPIRV_TOOLS_INSTALL) diff --git a/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.cpp b/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.cpp new file mode 100644 index 000000000..5430d3e86 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.cpp @@ -0,0 +1,32 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "change_operand_reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +bool ChangeOperandReductionOpportunity::PreconditionHolds() { + // Check that the instruction still has the original operand. + return inst_->NumOperands() > operand_index_ && + inst_->GetOperand(operand_index_).words[0] == original_id_ && + inst_->GetOperand(operand_index_).type == original_type_; +} + +void ChangeOperandReductionOpportunity::Apply() { + inst_->SetOperand(operand_index_, {new_id_}); +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.h b/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.h new file mode 100644 index 000000000..7e1fc8e3b --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/change_operand_reduction_opportunity.h @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_CHANGE_OPERAND_REDUCTION_OPPORTUNITY_H_ +#define SOURCE_REDUCE_CHANGE_OPERAND_REDUCTION_OPPORTUNITY_H_ + +#include "reduction_opportunity.h" +#include "source/opt/instruction.h" +#include "spirv-tools/libspirv.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +// An opportunity to replace an id operand of an instruction with some other id. +class ChangeOperandReductionOpportunity : public ReductionOpportunity { + public: + // Constructs the opportunity to replace operand |operand_index| of |inst| + // with |new_id|. + ChangeOperandReductionOpportunity(Instruction* inst, uint32_t operand_index, + uint32_t new_id) + : inst_(inst), + operand_index_(operand_index), + original_id_(inst->GetOperand(operand_index).words[0]), + original_type_(inst->GetOperand(operand_index).type), + new_id_(new_id) {} + + bool PreconditionHolds() override; + + protected: + void Apply() override; + + private: + Instruction* const inst_; + const uint32_t operand_index_; + const uint32_t original_id_; + const spv_operand_type_t original_type_; + const uint32_t new_id_; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_CHANGE_OPERAND_REDUCTION_OPPORTUNITY_H_ diff --git a/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.cpp b/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.cpp new file mode 100644 index 000000000..8e33da661 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.cpp @@ -0,0 +1,41 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/change_operand_to_undef_reduction_opportunity.h" + +#include "source/opt/ir_context.h" +#include "source/reduce/reduction_util.h" + +namespace spvtools { +namespace reduce { + +bool ChangeOperandToUndefReductionOpportunity::PreconditionHolds() { + // Check that the instruction still has the original operand. + return inst_->NumOperands() > operand_index_ && + inst_->GetOperand(operand_index_).words[0] == original_id_; +} + +void ChangeOperandToUndefReductionOpportunity::Apply() { + auto operand = inst_->GetOperand(operand_index_); + auto operand_id = operand.words[0]; + auto operand_id_def = context_->get_def_use_mgr()->GetDef(operand_id); + auto operand_type_id = operand_id_def->type_id(); + // The opportunity should not exist unless this holds. + assert(operand_type_id); + auto undef_id = FindOrCreateGlobalUndef(context_, operand_type_id); + inst_->SetOperand(operand_index_, {undef_id}); +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.h b/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.h new file mode 100644 index 000000000..ffd3155b0 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/change_operand_to_undef_reduction_opportunity.h @@ -0,0 +1,53 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_CHANGE_OPERAND_TO_UNDEF_REDUCTION_OPPORTUNITY_H_ +#define SOURCE_REDUCE_CHANGE_OPERAND_TO_UNDEF_REDUCTION_OPPORTUNITY_H_ + +#include "source/opt/instruction.h" +#include "source/reduce/reduction_opportunity.h" +#include "spirv-tools/libspirv.h" + +namespace spvtools { +namespace reduce { + +// An opportunity to replace an id operand of an instruction with undef. +class ChangeOperandToUndefReductionOpportunity : public ReductionOpportunity { + public: + // Constructs the opportunity to replace operand |operand_index| of |inst| + // with undef. + ChangeOperandToUndefReductionOpportunity(opt::IRContext* context, + opt::Instruction* inst, + uint32_t operand_index) + : context_(context), + inst_(inst), + operand_index_(operand_index), + original_id_(inst->GetOperand(operand_index).words[0]) {} + + bool PreconditionHolds() override; + + protected: + void Apply() override; + + private: + opt::IRContext* context_; + opt::Instruction* const inst_; + const uint32_t operand_index_; + const uint32_t original_id_; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_CHANGE_OPERAND_TO_UNDEF_REDUCTION_OPPORTUNITY_H_ diff --git a/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_pass.cpp new file mode 100644 index 000000000..4d04506e1 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_pass.cpp @@ -0,0 +1,83 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/operand_to_const_reduction_pass.h" + +#include "source/opt/instruction.h" +#include "source/reduce/change_operand_reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +std::vector> +OperandToConstReductionPass::GetAvailableOpportunities( + opt::IRContext* context) const { + std::vector> result; + assert(result.empty()); + + // We first loop over all constants. This means that all the reduction + // opportunities to replace an operand with a particular constant will be + // contiguous, and in particular it means that multiple, incompatible + // reduction opportunities that try to replace the same operand with distinct + // constants are likely to be discontiguous. This is good because the + // reducer works in the spirit of delta debugging and tries applying large + // contiguous blocks of opportunities early on, and we want to avoid having a + // large block of incompatible opportunities if possible. + for (const auto& constant : context->GetConstants()) { + for (auto& function : *context->module()) { + for (auto& block : function) { + for (auto& inst : block) { + // We iterate through the operands using an explicit index (rather + // than using a lambda) so that we use said index in the construction + // of a ChangeOperandReductionOpportunity + for (uint32_t index = 0; index < inst.NumOperands(); index++) { + const auto& operand = inst.GetOperand(index); + if (spvIsInIdType(operand.type)) { + const auto id = operand.words[0]; + auto def = context->get_def_use_mgr()->GetDef(id); + if (spvOpcodeIsConstant(def->opcode())) { + // The argument is already a constant. + continue; + } + if (def->opcode() == SpvOpFunction) { + // The argument refers to a function, e.g. the function called + // by OpFunctionCall; avoid replacing this with a constant of + // the function's return type. + continue; + } + auto type_id = def->type_id(); + if (type_id) { + if (constant->type_id() == type_id) { + result.push_back( + MakeUnique( + &inst, index, constant->result_id())); + } + } + } + } + } + } + } + } + return result; +} + +std::string OperandToConstReductionPass::GetName() const { + return "OperandToConstReductionPass"; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_pass.h b/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_pass.h new file mode 100644 index 000000000..4e7381e93 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/operand_to_const_reduction_pass.h @@ -0,0 +1,48 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_OPERAND_TO_CONST_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_OPERAND_TO_CONST_REDUCTION_PASS_H_ + +#include "source/reduce/reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// A reduction pass for replacing id operands of instructions with ids of +// constants. This reduces the extent to which ids of non-constants are used, +// paving the way for instructions that generate them to be eliminated by other +// passes. +class OperandToConstReductionPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit OperandToConstReductionPass(const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~OperandToConstReductionPass() override = default; + + std::string GetName() const final; + + protected: + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final; + + private: +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_OPERAND_TO_CONST_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_pass.cpp new file mode 100644 index 000000000..9280a41dd --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_pass.cpp @@ -0,0 +1,114 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "operand_to_dominating_id_reduction_pass.h" +#include "change_operand_reduction_opportunity.h" +#include "source/opt/instruction.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +std::vector> +OperandToDominatingIdReductionPass::GetAvailableOpportunities( + opt::IRContext* context) const { + std::vector> result; + + // Go through every instruction in every block, considering it as a potential + // dominator of other instructions. We choose this order for two reasons: + // + // (1) it is profitable for multiple opportunities to replace the same id x by + // different dominating ids y and z to be discontiguous, as they are + // incompatible. + // + // (2) We want to prioritise opportunities to replace an id with a more + // distant dominator. Intuitively, in a human-readable programming language + // if we have a complex expression e with many sub-expressions, we would like + // to prioritise replacing e with its smallest sub-expressions; generalising + // this idea to dominating ids this roughly corresponds to more distant + // dominators. + for (auto& function : *context->module()) { + for (auto dominating_block = function.begin(); + dominating_block != function.end(); ++dominating_block) { + for (auto& dominating_inst : *dominating_block) { + if (dominating_inst.HasResultId() && dominating_inst.type_id()) { + // Consider replacing any operand with matching type in a dominated + // instruction with the id generated by this instruction. + GetOpportunitiesForDominatingInst( + &result, &dominating_inst, dominating_block, &function, context); + } + } + } + } + return result; +} + +void OperandToDominatingIdReductionPass::GetOpportunitiesForDominatingInst( + std::vector>* opportunities, + opt::Instruction* candidate_dominator, + opt::Function::iterator candidate_dominator_block, opt::Function* function, + opt::IRContext* context) const { + assert(candidate_dominator->HasResultId()); + assert(candidate_dominator->type_id()); + auto dominator_analysis = context->GetDominatorAnalysis(function); + // SPIR-V requires a block to precede all blocks it dominates, so it suffices + // to search from the candidate dominator block onwards. + for (auto block = candidate_dominator_block; block != function->end(); + ++block) { + if (!dominator_analysis->Dominates(&*candidate_dominator_block, &*block)) { + // If the candidate dominator block doesn't dominate this block then there + // cannot be any of the desired reduction opportunities in this block. + continue; + } + for (auto& inst : *block) { + // We iterate through the operands using an explicit index (rather + // than using a lambda) so that we use said index in the construction + // of a ChangeOperandReductionOpportunity + for (uint32_t index = 0; index < inst.NumOperands(); index++) { + const auto& operand = inst.GetOperand(index); + if (spvIsInIdType(operand.type)) { + const auto id = operand.words[0]; + auto def = context->get_def_use_mgr()->GetDef(id); + assert(def); + if (!context->get_instr_block(def)) { + // The definition does not come from a block; e.g. it might be a + // constant. It is thus not relevant to this pass. + continue; + } + // Sanity check that we don't get here if the argument is a constant. + assert(!context->get_constant_mgr()->GetConstantFromInst(def)); + if (def->type_id() != candidate_dominator->type_id()) { + // The types need to match. + continue; + } + if (candidate_dominator != def && + dominator_analysis->Dominates(candidate_dominator, def)) { + // A hit: the candidate dominator strictly dominates the definition. + opportunities->push_back( + MakeUnique( + &inst, index, candidate_dominator->result_id())); + } + } + } + } + } +} + +std::string OperandToDominatingIdReductionPass::GetName() const { + return "OperandToDominatingIdReductionPass"; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_pass.h b/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_pass.h new file mode 100644 index 000000000..36bb20112 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/operand_to_dominating_id_reduction_pass.h @@ -0,0 +1,59 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_OPERAND_TO_DOMINATING_ID_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_OPERAND_TO_DOMINATING_ID_REDUCTION_PASS_H_ + +#include "reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// A reduction pass that aims to bring to SPIR-V (and generalize) the idea from +// human-readable languages of e.g. replacing an expression with one of its +// arguments, (x + y) -> x, or with a reference to an identifier that was +// assigned to higher up in the program. The generalization of this is to +// replace an id with a different id of the same type defined in some +// dominating instruction. +// +// If id x is defined and then used several times, changing each use of x to +// some dominating definition may eventually allow the statement defining x +// to be eliminated by another pass. +class OperandToDominatingIdReductionPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit OperandToDominatingIdReductionPass(const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~OperandToDominatingIdReductionPass() override = default; + + std::string GetName() const final; + + protected: + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final; + + private: + void GetOpportunitiesForDominatingInst( + std::vector>* opportunities, + opt::Instruction* dominating_instruction, + opt::Function::iterator candidate_dominator_block, + opt::Function* function, opt::IRContext* context) const; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_OPERAND_TO_DOMINATING_ID_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_pass.cpp new file mode 100644 index 000000000..e3d8a8ea3 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_pass.cpp @@ -0,0 +1,94 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/operand_to_undef_reduction_pass.h" + +#include "source/opt/instruction.h" +#include "source/reduce/change_operand_to_undef_reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +std::vector> +OperandToUndefReductionPass::GetAvailableOpportunities( + IRContext* context) const { + std::vector> result; + + for (auto& function : *context->module()) { + for (auto& block : function) { + for (auto& inst : block) { + // Skip instructions that result in a pointer type. + auto type_id = inst.type_id(); + if (type_id) { + auto type_id_def = context->get_def_use_mgr()->GetDef(type_id); + if (type_id_def->opcode() == SpvOpTypePointer) { + continue; + } + } + + // We iterate through the operands using an explicit index (rather + // than using a lambda) so that we use said index in the construction + // of a ChangeOperandToUndefReductionOpportunity + for (uint32_t index = 0; index < inst.NumOperands(); index++) { + const auto& operand = inst.GetOperand(index); + + if (spvIsInIdType(operand.type)) { + const auto operand_id = operand.words[0]; + auto operand_id_def = + context->get_def_use_mgr()->GetDef(operand_id); + + // Skip constant and undef operands. + // We always want the reducer to make the module "smaller", which + // ensures termination. + // Therefore, we assume: id > undef id > constant id. + if (spvOpcodeIsConstantOrUndef(operand_id_def->opcode())) { + continue; + } + + // Don't replace function operands with undef. + if (operand_id_def->opcode() == SpvOpFunction) { + continue; + } + + // Only consider operands that have a type. + auto operand_type_id = operand_id_def->type_id(); + if (operand_type_id) { + auto operand_type_id_def = + context->get_def_use_mgr()->GetDef(operand_type_id); + + // Skip pointer operands. + if (operand_type_id_def->opcode() == SpvOpTypePointer) { + continue; + } + + result.push_back( + MakeUnique( + context, &inst, index)); + } + } + } + } + } + } + return result; +} + +std::string OperandToUndefReductionPass::GetName() const { + return "OperandToUndefReductionPass"; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_pass.h b/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_pass.h new file mode 100644 index 000000000..e4ec603fb --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/operand_to_undef_reduction_pass.h @@ -0,0 +1,45 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_OPERAND_TO_UNDEF_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_OPERAND_TO_UNDEF_REDUCTION_PASS_H_ + +#include "source/reduce/reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// A reduction pass for replacing id operands of instructions with ids of undef. +class OperandToUndefReductionPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit OperandToUndefReductionPass(const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~OperandToUndefReductionPass() override = default; + + std::string GetName() const final; + + protected: + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final; + + private: +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_OPERAND_TO_UNDEF_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/reduce/pch_source_reduce.cpp b/3rdparty/spirv-tools/source/reduce/pch_source_reduce.cpp new file mode 100644 index 000000000..61e743645 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/pch_source_reduce.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_source_reduce.h" diff --git a/3rdparty/spirv-tools/source/reduce/pch_source_reduce.h b/3rdparty/spirv-tools/source/reduce/pch_source_reduce.h new file mode 100644 index 000000000..823b55a8a --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/pch_source_reduce.h @@ -0,0 +1,23 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include "source/reduce/change_operand_reduction_opportunity.h" +#include "source/reduce/operand_to_const_reduction_pass.h" +#include "source/reduce/reduction_opportunity.h" +#include "source/reduce/reduction_pass.h" +#include "source/reduce/remove_instruction_reduction_opportunity.h" +#include "source/reduce/remove_unreferenced_instruction_reduction_pass.h" diff --git a/3rdparty/spirv-tools/source/reduce/reducer.cpp b/3rdparty/spirv-tools/source/reduce/reducer.cpp new file mode 100644 index 000000000..4f4429aab --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reducer.cpp @@ -0,0 +1,154 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "source/spirv_reducer_options.h" + +#include "reducer.h" +#include "reduction_pass.h" + +namespace spvtools { +namespace reduce { + +struct Reducer::Impl { + explicit Impl(spv_target_env env) : target_env(env) {} + + bool ReachedStepLimit(uint32_t current_step, + spv_const_reducer_options options); + + const spv_target_env target_env; // Target environment. + MessageConsumer consumer; // Message consumer. + InterestingnessFunction interestingness_function; + std::vector> passes; +}; + +Reducer::Reducer(spv_target_env env) : impl_(MakeUnique(env)) {} + +Reducer::~Reducer() = default; + +void Reducer::SetMessageConsumer(MessageConsumer c) { + for (auto& pass : impl_->passes) { + pass->SetMessageConsumer(c); + } + impl_->consumer = std::move(c); +} + +void Reducer::SetInterestingnessFunction( + Reducer::InterestingnessFunction interestingness_function) { + impl_->interestingness_function = std::move(interestingness_function); +} + +Reducer::ReductionResultStatus Reducer::Run( + std::vector&& binary_in, std::vector* binary_out, + spv_const_reducer_options options) const { + std::vector current_binary = binary_in; + + // Keeps track of how many reduction attempts have been tried. Reduction + // bails out if this reaches a given limit. + uint32_t reductions_applied = 0; + + // Initial state should be interesting. + if (!impl_->interestingness_function(current_binary, reductions_applied)) { + impl_->consumer(SPV_MSG_INFO, nullptr, {}, + "Initial state was not interesting; stopping."); + return Reducer::ReductionResultStatus::kInitialStateNotInteresting; + } + + // Determines whether, on completing one round of reduction passes, it is + // worthwhile trying a further round. + bool another_round_worthwhile = true; + + // Apply round after round of reduction passes until we hit the reduction + // step limit, or deem that another round is not going to be worthwhile. + while (!impl_->ReachedStepLimit(reductions_applied, options) && + another_round_worthwhile) { + // At the start of a round of reduction passes, assume another round will + // not be worthwhile unless we find evidence to the contrary. + another_round_worthwhile = false; + + // Iterate through the available passes + for (auto& pass : impl_->passes) { + // If this pass hasn't reached its minimum granularity then it's + // worth eventually doing another round of reductions, in order to + // try this pass at a finer granularity. + another_round_worthwhile |= !pass->ReachedMinimumGranularity(); + + // Keep applying this pass at its current granularity until it stops + // working or we hit the reduction step limit. + impl_->consumer(SPV_MSG_INFO, nullptr, {}, + ("Trying pass " + pass->GetName() + ".").c_str()); + do { + auto maybe_result = pass->TryApplyReduction(current_binary); + if (maybe_result.empty()) { + // This pass did not have any impact, so move on to the next pass. + impl_->consumer( + SPV_MSG_INFO, nullptr, {}, + ("Pass " + pass->GetName() + " did not make a reduction step.") + .c_str()); + break; + } + std::stringstream stringstream; + reductions_applied++; + stringstream << "Pass " << pass->GetName() << " made reduction step " + << reductions_applied << "."; + impl_->consumer(SPV_MSG_INFO, nullptr, {}, + (stringstream.str().c_str())); + if (!spvtools::SpirvTools(impl_->target_env).Validate(maybe_result)) { + // The reduction step went wrong and an invalid binary was produced. + // By design, this shouldn't happen; this is a safeguard to stop an + // invalid binary from being regarded as interesting. + impl_->consumer(SPV_MSG_INFO, nullptr, {}, + "Reduction step produced an invalid binary."); + } else if (impl_->interestingness_function(maybe_result, + reductions_applied)) { + // Success! The binary produced by this reduction step is + // interesting, so make it the binary of interest henceforth, and + // note that it's worth doing another round of reduction passes. + impl_->consumer(SPV_MSG_INFO, nullptr, {}, + "Reduction step succeeded."); + current_binary = std::move(maybe_result); + another_round_worthwhile = true; + } + // Bail out if the reduction step limit has been reached. + } while (!impl_->ReachedStepLimit(reductions_applied, options)); + } + } + + *binary_out = std::move(current_binary); + + // Report whether reduction completed, or bailed out early due to reaching + // the step limit. + if (impl_->ReachedStepLimit(reductions_applied, options)) { + impl_->consumer(SPV_MSG_INFO, nullptr, {}, + "Reached reduction step limit; stopping."); + return Reducer::ReductionResultStatus::kReachedStepLimit; + } + impl_->consumer(SPV_MSG_INFO, nullptr, {}, "No more to reduce; stopping."); + return Reducer::ReductionResultStatus::kComplete; +} + +void Reducer::AddReductionPass( + std::unique_ptr&& reduction_pass) { + impl_->passes.push_back(std::move(reduction_pass)); +} + +bool Reducer::Impl::ReachedStepLimit(uint32_t current_step, + spv_const_reducer_options options) { + return current_step >= options->step_limit; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/reducer.h b/3rdparty/spirv-tools/source/reduce/reducer.h new file mode 100644 index 000000000..3a4c26c97 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reducer.h @@ -0,0 +1,97 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REDUCER_H_ +#define SOURCE_REDUCE_REDUCER_H_ + +#include +#include + +#include "spirv-tools/libspirv.hpp" + +#include "reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// This class manages the process of applying a reduction -- parameterized by a +// number of reduction passes and an interestingness test, to a SPIR-V binary. +class Reducer { + public: + // Possible statuses that can result from running a reduction. + enum ReductionResultStatus { + kInitialStateNotInteresting, + kReachedStepLimit, + kComplete + }; + + // The type for a function that will take a binary and return true if and + // only if the binary is deemed interesting. (The function also takes an + // integer argument that will be incremented each time the function is + // called; this is for debugging purposes). + // + // The notion of "interesting" depends on what properties of the binary or + // tools that process the binary we are trying to maintain during reduction. + using InterestingnessFunction = + std::function&, uint32_t)>; + + // Constructs an instance with the given target |env|, which is used to + // decode the binary to be reduced later. + // + // The constructed instance will have an empty message consumer, which just + // ignores all messages from the library. Use SetMessageConsumer() to supply + // one if messages are of concern. + // + // The constructed instance also needs to have an interestingness function + // set and some reduction passes added to it in order to be useful. + explicit Reducer(spv_target_env env); + + // Disables copy/move constructor/assignment operations. + Reducer(const Reducer&) = delete; + Reducer(Reducer&&) = delete; + Reducer& operator=(const Reducer&) = delete; + Reducer& operator=(Reducer&&) = delete; + + // Destructs this instance. + ~Reducer(); + + // Sets the message consumer to the given |consumer|. The |consumer| will be + // invoked once for each message communicated from the library. + void SetMessageConsumer(MessageConsumer consumer); + + // Sets the function that will be used to decide whether a reduced binary + // turned out to be interesting. + void SetInterestingnessFunction( + InterestingnessFunction interestingness_function); + + // Adds a reduction pass to the sequence of passes that will be iterated + // over. + void AddReductionPass(std::unique_ptr&& reduction_pass); + + // Reduces the given SPIR-V module |binary_out|. + // The reduced binary ends up in |binary_out|. + // A status is returned. + ReductionResultStatus Run(std::vector&& binary_in, + std::vector* binary_out, + spv_const_reducer_options options) const; + + private: + struct Impl; // Opaque struct for holding internal data. + std::unique_ptr impl_; // Unique pointer to internal data. +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REDUCER_H_ diff --git a/3rdparty/spirv-tools/source/reduce/reduction_opportunity.cpp b/3rdparty/spirv-tools/source/reduce/reduction_opportunity.cpp new file mode 100644 index 000000000..f562678dc --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reduction_opportunity.cpp @@ -0,0 +1,27 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +void ReductionOpportunity::TryToApply() { + if (PreconditionHolds()) { + Apply(); + } +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/reduction_opportunity.h b/3rdparty/spirv-tools/source/reduce/reduction_opportunity.h new file mode 100644 index 000000000..703a50a46 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reduction_opportunity.h @@ -0,0 +1,47 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REDUCTION_OPPORTUNITY_H_ +#define SOURCE_REDUCE_REDUCTION_OPPORTUNITY_H_ + +#include "spirv-tools/libspirv.hpp" + +namespace spvtools { +namespace reduce { + +// Abstract class: an opportunity to apply a reducing transformation. +class ReductionOpportunity { + public: + ReductionOpportunity() = default; + virtual ~ReductionOpportunity() = default; + + // Returns true if this opportunity has not been disabled by the application + // of another conflicting opportunity. + virtual bool PreconditionHolds() = 0; + + // Applies the opportunity, mutating the module from which the opportunity was + // created. It is a no-op if PreconditionHolds() returns false. + void TryToApply(); + + protected: + // Applies the opportunity, mutating the module from which the opportunity was + // created. + // Precondition: PreconditionHolds() must return true. + virtual void Apply() = 0; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REDUCTION_OPPORTUNITY_H_ diff --git a/3rdparty/spirv-tools/source/reduce/reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/reduction_pass.cpp new file mode 100644 index 000000000..befba8bc6 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reduction_pass.cpp @@ -0,0 +1,86 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "reduction_pass.h" + +#include "source/opt/build_module.h" + +namespace spvtools { +namespace reduce { + +std::vector ReductionPass::TryApplyReduction( + const std::vector& binary) { + // We represent modules as binaries because (a) attempts at reduction need to + // end up in binary form to be passed on to SPIR-V-consuming tools, and (b) + // when we apply a reduction step we need to do it on a fresh version of the + // module as if the reduction step proves to be uninteresting we need to + // backtrack; re-parsing from binary provides a very clean way of cloning the + // module. + std::unique_ptr context = + BuildModule(target_env_, consumer_, binary.data(), binary.size()); + assert(context); + + std::vector> opportunities = + GetAvailableOpportunities(context.get()); + + if (!is_initialized_) { + is_initialized_ = true; + index_ = 0; + granularity_ = (uint32_t)opportunities.size(); + } + + if (opportunities.empty()) { + granularity_ = 1; + return std::vector(); + } + + assert(granularity_ > 0); + + if (index_ >= opportunities.size()) { + index_ = 0; + granularity_ = std::max((uint32_t)1, granularity_ / 2); + return std::vector(); + } + + for (uint32_t i = index_; + i < std::min(index_ + granularity_, (uint32_t)opportunities.size()); + ++i) { + opportunities[i]->TryToApply(); + } + + index_ += granularity_; + + std::vector result; + context->module()->ToBinary(&result, false); + return result; +} + +void ReductionPass::SetMessageConsumer(MessageConsumer consumer) { + consumer_ = std::move(consumer); +} + +bool ReductionPass::ReachedMinimumGranularity() const { + if (!is_initialized_) { + // Conceptually we can think that if the pass has not yet been initialized, + // it is operating at unbounded granularity. + return false; + } + assert(granularity_ != 0); + return granularity_ == 1; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/reduction_pass.h b/3rdparty/spirv-tools/source/reduce/reduction_pass.h new file mode 100644 index 000000000..57e1c5f66 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reduction_pass.h @@ -0,0 +1,73 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_REDUCTION_PASS_H_ + +#include "spirv-tools/libspirv.hpp" + +#include "reduction_opportunity.h" +#include "source/opt/ir_context.h" + +namespace spvtools { +namespace reduce { + +// Abstract class representing a reduction pass, which can be repeatedly +// invoked to find and apply particular reduction opportunities to a SPIR-V +// binary. In the spirit of delta debugging, a pass initially tries to apply +// large chunks of reduction opportunities, iterating through available +// opportunities at a given granularity. When an iteration over available +// opportunities completes, the granularity is reduced and iteration starts +// again, until the minimum granularity is reached. +class ReductionPass { + public: + // Constructs a reduction pass with a given target environment, |target_env|. + // Initially the pass is uninitialized. + explicit ReductionPass(const spv_target_env target_env) + : target_env_(target_env), is_initialized_(false) {} + + virtual ~ReductionPass() = default; + + // Applies the reduction pass to the given binary. + std::vector TryApplyReduction(const std::vector& binary); + + // Sets a consumer to which relevant messages will be directed. + void SetMessageConsumer(MessageConsumer consumer); + + // Returns true if the granularity with which reduction opportunities are + // applied has reached a minimum. + bool ReachedMinimumGranularity() const; + + // Returns the name of the reduction pass (useful for monitoring reduction + // progress). + virtual std::string GetName() const = 0; + + protected: + // Finds and returns the reduction opportunities relevant to this pass that + // could be applied to the given SPIR-V module. + virtual std::vector> + GetAvailableOpportunities(opt::IRContext* context) const = 0; + + private: + const spv_target_env target_env_; + MessageConsumer consumer_; + bool is_initialized_; + uint32_t index_; + uint32_t granularity_; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/reduce/reduction_util.cpp b/3rdparty/spirv-tools/source/reduce/reduction_util.cpp new file mode 100644 index 000000000..103d63f19 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reduction_util.cpp @@ -0,0 +1,44 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/reduction_util.h" + +#include "source/opt/ir_context.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +uint32_t FindOrCreateGlobalUndef(IRContext* context, uint32_t type_id) { + for (auto& inst : context->module()->types_values()) { + if (inst.opcode() != SpvOpUndef) { + continue; + } + if (inst.type_id() == type_id) { + return inst.result_id(); + } + } + // TODO(2182): this is adapted from MemPass::Type2Undef. In due course it + // would be good to factor out this duplication. + const uint32_t undef_id = context->TakeNextId(); + std::unique_ptr undef_inst( + new Instruction(context, SpvOpUndef, type_id, undef_id, {})); + assert(undef_id == undef_inst->result_id()); + context->module()->AddGlobalValue(std::move(undef_inst)); + return undef_id; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/reduction_util.h b/3rdparty/spirv-tools/source/reduce/reduction_util.h new file mode 100644 index 000000000..d8efc9705 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/reduction_util.h @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REDUCTION_UTIL_H_ +#define SOURCE_REDUCE_REDUCTION_UTIL_H_ + +#include "spirv-tools/libspirv.hpp" + +#include "source/opt/ir_context.h" +#include "source/reduce/reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +// Returns an OpUndef id from the global value list that is of the given type, +// adding one if it does not exist. +uint32_t FindOrCreateGlobalUndef(opt::IRContext* context, uint32_t type_id); + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REDUCTION_UTIL_H_ diff --git a/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.cpp b/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.cpp new file mode 100644 index 000000000..7b7a74e48 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.cpp @@ -0,0 +1,29 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/opt/ir_context.h" + +#include "remove_instruction_reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +bool RemoveInstructionReductionOpportunity::PreconditionHolds() { return true; } + +void RemoveInstructionReductionOpportunity::Apply() { + inst_->context()->KillInst(inst_); +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.h b/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.h new file mode 100644 index 000000000..e9f442e3f --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/remove_instruction_reduction_opportunity.h @@ -0,0 +1,46 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REMOVE_INSTRUCTION_REDUCTION_OPPORTUNITY_H_ +#define SOURCE_REDUCE_REMOVE_INSTRUCTION_REDUCTION_OPPORTUNITY_H_ + +#include "reduction_opportunity.h" +#include "source/opt/instruction.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +// An opportunity to remove an instruction from the SPIR-V module. +class RemoveInstructionReductionOpportunity : public ReductionOpportunity { + public: + // Constructs the opportunity to remove |inst|. + explicit RemoveInstructionReductionOpportunity(Instruction* inst) + : inst_(inst) {} + + // Always returns true, as this opportunity can always be applied. + bool PreconditionHolds() override; + + protected: + void Apply() override; + + private: + Instruction* inst_; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REMOVE_INSTRUCTION_REDUCTION_OPPORTUNITY_H_ diff --git a/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_pass.cpp new file mode 100644 index 000000000..bf99bc57f --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_pass.cpp @@ -0,0 +1,44 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "remove_opname_instruction_reduction_pass.h" +#include "remove_instruction_reduction_opportunity.h" +#include "source/opcode.h" +#include "source/opt/instruction.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +std::vector> +RemoveOpNameInstructionReductionPass::GetAvailableOpportunities( + opt::IRContext* context) const { + std::vector> result; + + for (auto& inst : context->module()->debugs2()) { + if (inst.opcode() == SpvOpName || inst.opcode() == SpvOpMemberName) { + result.push_back( + MakeUnique(&inst)); + } + } + return result; +} + +std::string RemoveOpNameInstructionReductionPass::GetName() const { + return "RemoveOpNameInstructionReductionPass"; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_pass.h b/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_pass.h new file mode 100644 index 000000000..2990a49cc --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/remove_opname_instruction_reduction_pass.h @@ -0,0 +1,48 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REMOVE_OPNAME_INSTRUCTION_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_REMOVE_OPNAME_INSTRUCTION_REDUCTION_PASS_H_ + +#include "reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// A reduction pass for removing OpName instructions. As well as making the +// module smaller, removing an OpName instruction may create opportunities +// for subsequently removing the instructions that create the ids to which the +// OpName applies. +class RemoveOpNameInstructionReductionPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit RemoveOpNameInstructionReductionPass(const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~RemoveOpNameInstructionReductionPass() override = default; + + std::string GetName() const final; + + protected: + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final; + + private: +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REMOVE_OpName_INSTRUCTION_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_pass.cpp new file mode 100644 index 000000000..bc4998d6a --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_pass.cpp @@ -0,0 +1,60 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "remove_unreferenced_instruction_reduction_pass.h" +#include "remove_instruction_reduction_opportunity.h" +#include "source/opcode.h" +#include "source/opt/instruction.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +std::vector> +RemoveUnreferencedInstructionReductionPass::GetAvailableOpportunities( + opt::IRContext* context) const { + std::vector> result; + + for (auto& function : *context->module()) { + for (auto& block : function) { + for (auto& inst : block) { + if (context->get_def_use_mgr()->NumUses(&inst) > 0) { + continue; + } + if (spvOpcodeIsBlockTerminator(inst.opcode()) || + inst.opcode() == SpvOpSelectionMerge || + inst.opcode() == SpvOpLoopMerge) { + // In this reduction pass we do not want to affect static control + // flow. + continue; + } + // Given that we're in a block, we should only get here if the + // instruction is not directly related to control flow; i.e., it's + // some straightforward instruction with an unused result, like an + // arithmetic operation or function call. + result.push_back( + MakeUnique(&inst)); + } + } + } + return result; +} + +std::string RemoveUnreferencedInstructionReductionPass::GetName() const { + return "RemoveUnreferencedInstructionReductionPass"; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_pass.h b/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_pass.h new file mode 100644 index 000000000..44a0d55e9 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/remove_unreferenced_instruction_reduction_pass.h @@ -0,0 +1,50 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_REMOVE_UNREFERENCED_INSTRUCTION_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_REMOVE_UNREFERENCED_INSTRUCTION_REDUCTION_PASS_H_ + +#include "reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// A reduction pass for removing non-control-flow instructions in blocks in +// cases where the instruction's id is not referenced. As well as making the +// module smaller, removing an instruction that references particular ids may +// create opportunities for subsequently removing the instructions that +// generated those ids. +class RemoveUnreferencedInstructionReductionPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit RemoveUnreferencedInstructionReductionPass( + const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~RemoveUnreferencedInstructionReductionPass() override = default; + + std::string GetName() const final; + + protected: + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final; + + private: +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_REMOVE_UNREFERENCED_INSTRUCTION_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.cpp b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.cpp new file mode 100644 index 000000000..bf0e085ad --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.cpp @@ -0,0 +1,360 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/structured_loop_to_selection_reduction_opportunity.h" + +#include "source/opt/aggressive_dead_code_elim_pass.h" +#include "source/opt/ir_context.h" +#include "source/reduce/reduction_util.h" + +namespace spvtools { +namespace reduce { + +namespace { +const uint32_t kMergeNodeIndex = 0; +const uint32_t kContinueNodeIndex = 1; +} // namespace + +bool StructuredLoopToSelectionReductionOpportunity::PreconditionHolds() { + // Is the loop header reachable? + return loop_construct_header_->GetLabel() + ->context() + ->GetDominatorAnalysis(enclosing_function_) + ->IsReachable(loop_construct_header_); +} + +void StructuredLoopToSelectionReductionOpportunity::Apply() { + // Force computation of dominator analysis, CFG and structured CFG analysis + // before we start to mess with edges in the function. + context_->GetDominatorAnalysis(enclosing_function_); + context_->cfg(); + context_->GetStructuredCFGAnalysis(); + + // (1) Redirect edges that point to the loop's continue target to their + // closest merge block. + RedirectToClosestMergeBlock( + loop_construct_header_->GetLoopMergeInst()->GetSingleWordOperand( + kContinueNodeIndex)); + + // (2) Redirect edges that point to the loop's merge block to their closest + // merge block (which might be that of an enclosing selection, for instance). + RedirectToClosestMergeBlock( + loop_construct_header_->GetLoopMergeInst()->GetSingleWordOperand( + kMergeNodeIndex)); + + // (3) Turn the loop construct header into a selection. + ChangeLoopToSelection(); + + // We have made control flow changes that do not preserve the analyses that + // were performed. + context_->InvalidateAnalysesExceptFor(IRContext::Analysis::kAnalysisNone); + + // (4) By changing CFG edges we may have created scenarios where ids are used + // without being dominated; we fix instances of this. + FixNonDominatedIdUses(); + + // Invalidate the analyses we just used. + context_->InvalidateAnalysesExceptFor(IRContext::Analysis::kAnalysisNone); +} + +void StructuredLoopToSelectionReductionOpportunity::RedirectToClosestMergeBlock( + uint32_t original_target_id) { + // Consider every predecessor of the node with respect to which edges should + // be redirected. + std::set already_seen; + for (auto pred : context_->cfg()->preds(original_target_id)) { + if (already_seen.find(pred) != already_seen.end()) { + // We have already handled this predecessor (this scenario can arise if + // there are multiple edges from a block b to original_target_id). + continue; + } + already_seen.insert(pred); + + if (!context_->GetDominatorAnalysis(enclosing_function_) + ->IsReachable(pred)) { + // We do not care about unreachable predecessors (and dominance + // information, and thus the notion of structured control flow, makes + // little sense for unreachable blocks). + continue; + } + // Find the merge block of the structured control construct that most + // tightly encloses the predecessor. + uint32_t new_merge_target; + // The structured CFG analysis deliberately does not regard a header as + // belonging to the structure that it heads. We want it to, so handle this + // case specially. + if (context_->cfg()->block(pred)->MergeBlockIdIfAny()) { + new_merge_target = context_->cfg()->block(pred)->MergeBlockIdIfAny(); + } else { + new_merge_target = context_->GetStructuredCFGAnalysis()->MergeBlock(pred); + } + assert(new_merge_target != pred); + + if (!new_merge_target) { + // If the loop being transformed is outermost, and the predecessor is + // part of that loop's continue construct, there will be no such + // enclosing control construct. In this case, the continue construct + // will become unreachable anyway, so it is fine not to redirect the + // edge. + continue; + } + + if (new_merge_target != original_target_id) { + // Redirect the edge if it doesn't already point to the desired block. + RedirectEdge(pred, original_target_id, new_merge_target); + } + } +} + +void StructuredLoopToSelectionReductionOpportunity::RedirectEdge( + uint32_t source_id, uint32_t original_target_id, uint32_t new_target_id) { + // Redirect edge source_id->original_target_id to edge + // source_id->new_target_id, where the blocks involved are all different. + assert(source_id != original_target_id); + assert(source_id != new_target_id); + assert(original_target_id != new_target_id); + + // original_target_id must either be the merge target or continue construct + // for the loop being operated on. + assert(original_target_id == + loop_construct_header_->GetMergeInst()->GetSingleWordOperand( + kMergeNodeIndex) || + original_target_id == + loop_construct_header_->GetMergeInst()->GetSingleWordOperand( + kContinueNodeIndex)); + + auto terminator = context_->cfg()->block(source_id)->terminator(); + + // Figure out which operands of the terminator need to be considered for + // redirection. + std::vector operand_indices; + if (terminator->opcode() == SpvOpBranch) { + operand_indices = {0}; + } else if (terminator->opcode() == SpvOpBranchConditional) { + operand_indices = {1, 2}; + } else { + assert(terminator->opcode() == SpvOpSwitch); + for (uint32_t label_index = 1; label_index < terminator->NumOperands(); + label_index += 2) { + operand_indices.push_back(label_index); + } + } + + // Redirect the relevant operands, asserting that at least one redirection is + // made. + bool redirected = false; + for (auto operand_index : operand_indices) { + if (terminator->GetSingleWordOperand(operand_index) == original_target_id) { + terminator->SetOperand(operand_index, {new_target_id}); + redirected = true; + } + } + (void)(redirected); + assert(redirected); + + // The old and new targets may have phi instructions; these will need to + // respect the change in edges. + AdaptPhiInstructionsForRemovedEdge( + source_id, context_->cfg()->block(original_target_id)); + AdaptPhiInstructionsForAddedEdge(source_id, + context_->cfg()->block(new_target_id)); +} + +void StructuredLoopToSelectionReductionOpportunity:: + AdaptPhiInstructionsForRemovedEdge(uint32_t from_id, BasicBlock* to_block) { + to_block->ForEachPhiInst([&from_id](Instruction* phi_inst) { + Instruction::OperandList new_in_operands; + // Go through the OpPhi's input operands in (variable, parent) pairs. + for (uint32_t index = 0; index < phi_inst->NumInOperands(); index += 2) { + // Keep all pairs where the parent is not the block from which the edge + // is being removed. + if (phi_inst->GetInOperand(index + 1).words[0] != from_id) { + new_in_operands.push_back(phi_inst->GetInOperand(index)); + new_in_operands.push_back(phi_inst->GetInOperand(index + 1)); + } + } + phi_inst->SetInOperands(std::move(new_in_operands)); + }); +} + +void StructuredLoopToSelectionReductionOpportunity:: + AdaptPhiInstructionsForAddedEdge(uint32_t from_id, BasicBlock* to_block) { + to_block->ForEachPhiInst([this, &from_id](Instruction* phi_inst) { + // Add to the phi operand an (undef, from_id) pair to reflect the added + // edge. + auto undef_id = FindOrCreateGlobalUndef(context_, phi_inst->type_id()); + phi_inst->AddOperand(Operand(SPV_OPERAND_TYPE_ID, {undef_id})); + phi_inst->AddOperand(Operand(SPV_OPERAND_TYPE_ID, {from_id})); + }); +} + +void StructuredLoopToSelectionReductionOpportunity::ChangeLoopToSelection() { + // Change the merge instruction from OpLoopMerge to OpSelectionMerge, with + // the same merge block. + auto loop_merge_inst = loop_construct_header_->GetLoopMergeInst(); + auto const loop_merge_block_id = + loop_merge_inst->GetSingleWordOperand(kMergeNodeIndex); + loop_merge_inst->SetOpcode(SpvOpSelectionMerge); + loop_merge_inst->ReplaceOperands( + {{loop_merge_inst->GetOperand(kMergeNodeIndex).type, + {loop_merge_block_id}}, + {SPV_OPERAND_TYPE_SELECTION_CONTROL, {SpvSelectionControlMaskNone}}}); + + // The loop header either finishes with OpBranch or OpBranchConditional. + // The latter is fine for a selection. In the former case we need to turn + // it into OpBranchConditional. We use "true" as the condition, and make + // the "else" branch be the merge block. + auto terminator = loop_construct_header_->terminator(); + if (terminator->opcode() == SpvOpBranch) { + analysis::Bool temp; + const analysis::Bool* bool_type = + context_->get_type_mgr()->GetRegisteredType(&temp)->AsBool(); + auto const_mgr = context_->get_constant_mgr(); + auto true_const = const_mgr->GetConstant(bool_type, {true}); + auto true_const_result_id = + const_mgr->GetDefiningInstruction(true_const)->result_id(); + auto original_branch_id = terminator->GetSingleWordOperand(0); + terminator->SetOpcode(SpvOpBranchConditional); + terminator->ReplaceOperands({{SPV_OPERAND_TYPE_ID, {true_const_result_id}}, + {SPV_OPERAND_TYPE_ID, {original_branch_id}}, + {SPV_OPERAND_TYPE_ID, {loop_merge_block_id}}}); + if (original_branch_id != loop_merge_block_id) { + AdaptPhiInstructionsForAddedEdge( + loop_construct_header_->id(), + context_->cfg()->block(loop_merge_block_id)); + } + } +} + +void StructuredLoopToSelectionReductionOpportunity::FixNonDominatedIdUses() { + // Consider each instruction in the function. + for (auto& block : *enclosing_function_) { + for (auto& def : block) { + if (def.opcode() == SpvOpVariable) { + // Variables are defined at the start of the function, and can be + // accessed by all blocks, even by unreachable blocks that have no + // dominators, so we do not need to worry about them. + continue; + } + context_->get_def_use_mgr()->ForEachUse(&def, [this, &block, &def]( + Instruction* use, + uint32_t index) { + // If a use is not appropriately dominated by its definition, + // replace the use with an OpUndef, unless the definition is an + // access chain, in which case replace it with some (possibly fresh) + // variable (as we cannot load from / store to OpUndef). + if (!DefinitionSufficientlyDominatesUse(&def, use, index, block)) { + if (def.opcode() == SpvOpAccessChain) { + auto pointer_type = + context_->get_type_mgr()->GetType(def.type_id())->AsPointer(); + switch (pointer_type->storage_class()) { + case SpvStorageClassFunction: + use->SetOperand( + index, {FindOrCreateFunctionVariable( + context_->get_type_mgr()->GetId(pointer_type))}); + break; + default: + // TODO(2183) Need to think carefully about whether it makes + // sense to add new variables for all storage classes; it's fine + // for Private but might not be OK for input/output storage + // classes for example. + use->SetOperand( + index, {FindOrCreateGlobalVariable( + context_->get_type_mgr()->GetId(pointer_type))}); + break; + } + } else { + use->SetOperand(index, + {FindOrCreateGlobalUndef(context_, def.type_id())}); + } + } + }); + } + } +} + +bool StructuredLoopToSelectionReductionOpportunity:: + DefinitionSufficientlyDominatesUse(Instruction* def, Instruction* use, + uint32_t use_index, + BasicBlock& def_block) { + if (use->opcode() == SpvOpPhi) { + // A use in a phi doesn't need to be dominated by its definition, but the + // associated parent block does need to be dominated by the definition. + return context_->GetDominatorAnalysis(enclosing_function_) + ->Dominates(def_block.id(), use->GetSingleWordOperand(use_index + 1)); + } + // In non-phi cases, a use needs to be dominated by its definition. + return context_->GetDominatorAnalysis(enclosing_function_) + ->Dominates(def, use); +} + +uint32_t +StructuredLoopToSelectionReductionOpportunity::FindOrCreateGlobalVariable( + uint32_t pointer_type_id) { + for (auto& inst : context_->module()->types_values()) { + if (inst.opcode() != SpvOpVariable) { + continue; + } + if (inst.type_id() == pointer_type_id) { + return inst.result_id(); + } + } + const uint32_t variable_id = context_->TakeNextId(); + std::unique_ptr variable_inst( + new Instruction(context_, SpvOpVariable, pointer_type_id, variable_id, + {{SPV_OPERAND_TYPE_STORAGE_CLASS, + {(uint32_t)context_->get_type_mgr() + ->GetType(pointer_type_id) + ->AsPointer() + ->storage_class()}}})); + context_->module()->AddGlobalValue(std::move(variable_inst)); + return variable_id; +} + +uint32_t +StructuredLoopToSelectionReductionOpportunity::FindOrCreateFunctionVariable( + uint32_t pointer_type_id) { + // The pointer type of a function variable must have Function storage class. + assert(context_->get_type_mgr() + ->GetType(pointer_type_id) + ->AsPointer() + ->storage_class() == SpvStorageClassFunction); + + // Go through the instructions in the function's first block until we find a + // suitable variable, or go past all the variables. + BasicBlock::iterator iter = enclosing_function_->begin()->begin(); + for (;; ++iter) { + // We will either find a suitable variable, or find a non-variable + // instruction; we won't exhaust all instructions. + assert(iter != enclosing_function_->begin()->end()); + if (iter->opcode() != SpvOpVariable) { + // If we see a non-variable, we have gone through all the variables. + break; + } + if (iter->type_id() == pointer_type_id) { + return iter->result_id(); + } + } + // At this point, iter refers to the first non-function instruction of the + // function's entry block. + const uint32_t variable_id = context_->TakeNextId(); + std::unique_ptr variable_inst(new Instruction( + context_, SpvOpVariable, pointer_type_id, variable_id, + {{SPV_OPERAND_TYPE_STORAGE_CLASS, {SpvStorageClassFunction}}})); + iter->InsertBefore(std::move(variable_inst)); + return variable_id; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.h b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.h new file mode 100644 index 000000000..71b0f0eb4 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_opportunity.h @@ -0,0 +1,116 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_CUT_LOOP_REDUCTION_OPPORTUNITY_H_ +#define SOURCE_REDUCE_CUT_LOOP_REDUCTION_OPPORTUNITY_H_ + +#include "source/opt/def_use_manager.h" +#include "source/opt/dominator_analysis.h" +#include "source/opt/function.h" +#include "source/reduce/reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +// An opportunity to replace a structured loop with a selection. +class StructuredLoopToSelectionReductionOpportunity + : public ReductionOpportunity { + public: + // Constructs an opportunity from a loop header block and the function that + // encloses it. + explicit StructuredLoopToSelectionReductionOpportunity( + IRContext* context, BasicBlock* loop_construct_header, + Function* enclosing_function) + : context_(context), + loop_construct_header_(loop_construct_header), + enclosing_function_(enclosing_function) {} + + // Returns true if the loop header is reachable. A structured loop might + // become unreachable as a result of turning another structured loop into + // a selection. + bool PreconditionHolds() override; + + protected: + void Apply() override; + + private: + // Parameter |original_target_id| is the id of the loop's merge block or + // continue target. This method considers each edge of the form + // b->original_target_id and transforms it into an edge of the form b->c, + // where c is the merge block of the structured control flow construct that + // most tightly contains b. + void RedirectToClosestMergeBlock(uint32_t original_target_id); + + // |source_id|, |original_target_id| and |new_target_id| are required to all + // be distinct, with a CFG edge existing from |source_id| to + // |original_target_id|, and |original_target_id| being either the merge block + // or continue target for the loop being operated on. + // The method removes this edge and adds an edge from + // |source_id| to |new_target_id|. It takes care of fixing up any OpPhi + // instructions associated with |original_target_id| and |new_target_id|. + void RedirectEdge(uint32_t source_id, uint32_t original_target_id, + uint32_t new_target_id); + + // Removes any components of |to_block|'s phi instructions relating to + // |from_id|. + void AdaptPhiInstructionsForRemovedEdge(uint32_t from_id, + BasicBlock* to_block); + + // Adds components to |to_block|'s phi instructions to account for a new + // incoming edge from |from_id|. + void AdaptPhiInstructionsForAddedEdge(uint32_t from_id, BasicBlock* to_block); + + // Turns the OpLoopMerge for the loop into OpSelectionMerge, and adapts the + // following branch instruction accordingly. + void ChangeLoopToSelection(); + + // Fixes any scenarios where, due to CFG changes, ids have uses not dominated + // by their definitions, by changing such uses to uses of OpUndef or of dummy + // variables. + void FixNonDominatedIdUses(); + + // Returns true if and only if at least one of the following holds: + // 1) |def| dominates |use| + // 2) |def| is an OpVariable + // 3) |use| is part of an OpPhi, with associated incoming block b, and |def| + // dominates b. + bool DefinitionSufficientlyDominatesUse(Instruction* def, Instruction* use, + uint32_t use_index, + BasicBlock& def_block); + + // Checks whether the global value list has an OpVariable of the given pointer + // type, adding one if not, and returns the id of such an OpVariable. + // + // TODO(2184): This will likely be used by other reduction passes, so should + // be factored out in due course. + uint32_t FindOrCreateGlobalVariable(uint32_t pointer_type_id); + + // Checks whether the enclosing function has an OpVariable of the given + // pointer type, adding one if not, and returns the id of such an OpVariable. + // + // TODO(2184): This will likely be used by other reduction passes, so should + // be factored out in due course. + uint32_t FindOrCreateFunctionVariable(uint32_t pointer_type_id); + + IRContext* context_; + BasicBlock* loop_construct_header_; + Function* enclosing_function_; +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_CUT_LOOP_REDUCTION_OPPORTUNITY_H_ diff --git a/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_pass.cpp b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_pass.cpp new file mode 100644 index 000000000..768a2e8e1 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_pass.cpp @@ -0,0 +1,95 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "structured_loop_to_selection_reduction_pass.h" +#include "structured_loop_to_selection_reduction_opportunity.h" + +namespace spvtools { +namespace reduce { + +using namespace opt; + +namespace { +const uint32_t kMergeNodeIndex = 0; +const uint32_t kContinueNodeIndex = 1; +} // namespace + +std::vector> +StructuredLoopToSelectionReductionPass::GetAvailableOpportunities( + opt::IRContext* context) const { + std::vector> result; + + std::set merge_block_ids; + for (auto& function : *context->module()) { + for (auto& block : function) { + auto merge_inst = block.GetMergeInst(); + if (merge_inst) { + merge_block_ids.insert( + merge_inst->GetSingleWordOperand(kMergeNodeIndex)); + } + } + } + + // Consider each loop construct header in the module. + for (auto& function : *context->module()) { + for (auto& block : function) { + auto loop_merge_inst = block.GetLoopMergeInst(); + if (!loop_merge_inst) { + // This is not a loop construct header. + continue; + } + + // Check whether the loop construct's continue target is the merge block + // of some structured control flow construct. If it is, we cautiously do + // not consider applying a transformation. + if (merge_block_ids.find(loop_merge_inst->GetSingleWordOperand( + kContinueNodeIndex)) != merge_block_ids.end()) { + continue; + } + + // Check whether the loop construct header dominates its merge block. + // If not, the merge block must be unreachable in the control flow graph + // so we cautiously do not consider applying a transformation. + auto merge_block_id = + loop_merge_inst->GetSingleWordInOperand(kMergeNodeIndex); + if (!context->GetDominatorAnalysis(&function)->Dominates( + block.id(), merge_block_id)) { + continue; + } + + // Check whether the loop construct merge block postdominates the loop + // construct header. If not (e.g. because the loop contains OpReturn, + // OpKill or OpUnreachable), we cautiously do not consider applying + // a transformation. + if (!context->GetPostDominatorAnalysis(&function)->Dominates( + merge_block_id, block.id())) { + continue; + } + + // We can turn this structured loop into a selection, so add the + // opportunity to do so. + result.push_back( + MakeUnique( + context, &block, &function)); + } + } + return result; +} + +std::string StructuredLoopToSelectionReductionPass::GetName() const { + return "StructuredLoopToSelectionReductionPass"; +} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_pass.h b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_pass.h new file mode 100644 index 000000000..a1f88bc54 --- /dev/null +++ b/3rdparty/spirv-tools/source/reduce/structured_loop_to_selection_reduction_pass.h @@ -0,0 +1,61 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_REDUCE_CUT_LOOP_REDUCTION_PASS_H_ +#define SOURCE_REDUCE_CUT_LOOP_REDUCTION_PASS_H_ + +#include "reduction_pass.h" + +namespace spvtools { +namespace reduce { + +// Turns structured loops into selections, generalizing from a human-writable +// language the idea of turning a loop: +// +// while (c) { +// body; +// } +// +// into: +// +// if (c) { +// body; +// } +// +// The pass results in continue constructs of transformed loops becoming +// unreachable; another pass for eliminating blocks may end up being able to +// remove them. +class StructuredLoopToSelectionReductionPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit StructuredLoopToSelectionReductionPass( + const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~StructuredLoopToSelectionReductionPass() override = default; + + std::string GetName() const final; + + protected: + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final; + + private: +}; + +} // namespace reduce +} // namespace spvtools + +#endif // SOURCE_REDUCE_CUT_LOOP_REDUCTION_PASS_H_ diff --git a/3rdparty/spirv-tools/source/spirv_optimizer_options.cpp b/3rdparty/spirv-tools/source/spirv_optimizer_options.cpp new file mode 100644 index 000000000..30db4e2de --- /dev/null +++ b/3rdparty/spirv-tools/source/spirv_optimizer_options.cpp @@ -0,0 +1,41 @@ +// Copyright (c) 2017 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "source/spirv_optimizer_options.h" + +SPIRV_TOOLS_EXPORT spv_optimizer_options spvOptimizerOptionsCreate(void) { + return new spv_optimizer_options_t(); +} + +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsDestroy( + spv_optimizer_options options) { + delete options; +} + +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetRunValidator( + spv_optimizer_options options, bool val) { + options->run_validator_ = val; +} + +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetValidatorOptions( + spv_optimizer_options options, spv_validator_options val) { + options->val_options_ = *val; +} +SPIRV_TOOLS_EXPORT void spvOptimizerOptionsSetMaxIdBound( + spv_optimizer_options options, uint32_t val) { + options->max_id_bound_ = val; +} diff --git a/3rdparty/spirv-tools/source/spirv_optimizer_options.h b/3rdparty/spirv-tools/source/spirv_optimizer_options.h new file mode 100644 index 000000000..1eb4d3f1b --- /dev/null +++ b/3rdparty/spirv-tools/source/spirv_optimizer_options.h @@ -0,0 +1,40 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_SPIRV_OPTIMIZER_OPTIONS_H_ +#define SOURCE_SPIRV_OPTIMIZER_OPTIONS_H_ + +#include "source/spirv_validator_options.h" +#include "spirv-tools/libspirv.h" + +// Manages command line options passed to the SPIR-V Validator. New struct +// members may be added for any new option. +struct spv_optimizer_options_t { + spv_optimizer_options_t() + : run_validator_(true), + val_options_(), + max_id_bound_(kDefaultMaxIdBound) {} + + // When true the validator will be run before optimizations are run. + bool run_validator_; + + // Options to pass to the validator if it is run. + spv_validator_options_t val_options_; + + // The maximum value the id bound for a module can have. The Spir-V spec says + // this value must be at least 0x3FFFFF, but implementations can allow for a + // higher value. + uint32_t max_id_bound_; +}; +#endif // SOURCE_SPIRV_OPTIMIZER_OPTIONS_H_ diff --git a/3rdparty/spirv-tools/source/spirv_reducer_options.cpp b/3rdparty/spirv-tools/source/spirv_reducer_options.cpp new file mode 100644 index 000000000..110ea3e09 --- /dev/null +++ b/3rdparty/spirv-tools/source/spirv_reducer_options.cpp @@ -0,0 +1,31 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "source/spirv_reducer_options.h" + +SPIRV_TOOLS_EXPORT spv_reducer_options spvReducerOptionsCreate() { + return new spv_reducer_options_t(); +} + +SPIRV_TOOLS_EXPORT void spvReducerOptionsDestroy(spv_reducer_options options) { + delete options; +} + +SPIRV_TOOLS_EXPORT void spvReducerOptionsSetStepLimit( + spv_reducer_options options, uint32_t step_limit) { + options->step_limit = step_limit; +} diff --git a/3rdparty/spirv-tools/source/spirv_reducer_options.h b/3rdparty/spirv-tools/source/spirv_reducer_options.h new file mode 100644 index 000000000..d48303ca6 --- /dev/null +++ b/3rdparty/spirv-tools/source/spirv_reducer_options.h @@ -0,0 +1,35 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_SPIRV_REDUCER_OPTIONS_H_ +#define SOURCE_SPIRV_REDUCER_OPTIONS_H_ + +#include "spirv-tools/libspirv.h" + +#include +#include + +// The default maximum number of steps for the reducer to run before giving up. +const uint32_t kDefaultStepLimit = 250; + +// Manages command line options passed to the SPIR-V Reducer. New struct +// members may be added for any new option. +struct spv_reducer_options_t { + spv_reducer_options_t() : step_limit(kDefaultStepLimit) {} + + // The number of steps the reducer will run for before giving up. + uint32_t step_limit; +}; + +#endif // SOURCE_SPIRV_REDUCER_OPTIONS_H_ diff --git a/3rdparty/spirv-tools/source/spirv_target_env.cpp b/3rdparty/spirv-tools/source/spirv_target_env.cpp index 7a11630c7..a3aa0af03 100644 --- a/3rdparty/spirv-tools/source/spirv_target_env.cpp +++ b/3rdparty/spirv-tools/source/spirv_target_env.cpp @@ -14,7 +14,6 @@ #include "source/spirv_target_env.h" -#include #include #include "source/spirv_constant.h" @@ -63,7 +62,6 @@ const char* spvTargetEnvDescription(spv_target_env env) { case SPV_ENV_WEBGPU_0: return "SPIR-V 1.3 (under WIP WebGPU semantics)"; } - assert(0 && "Unhandled SPIR-V target environment"); return ""; } @@ -94,7 +92,6 @@ uint32_t spvVersionForTargetEnv(spv_target_env env) { case SPV_ENV_WEBGPU_0: return SPV_SPIRV_VERSION_WORD(1, 3); } - assert(0 && "Unhandled SPIR-V target environment"); return SPV_SPIRV_VERSION_WORD(0, 0); } @@ -195,3 +192,59 @@ bool spvIsVulkanEnv(spv_target_env env) { } return false; } + +bool spvIsOpenCLEnv(spv_target_env env) { + switch (env) { + case SPV_ENV_UNIVERSAL_1_0: + case SPV_ENV_VULKAN_1_0: + case SPV_ENV_UNIVERSAL_1_1: + case SPV_ENV_OPENGL_4_0: + case SPV_ENV_OPENGL_4_1: + case SPV_ENV_OPENGL_4_2: + case SPV_ENV_OPENGL_4_3: + case SPV_ENV_OPENGL_4_5: + case SPV_ENV_UNIVERSAL_1_2: + case SPV_ENV_UNIVERSAL_1_3: + case SPV_ENV_VULKAN_1_1: + case SPV_ENV_WEBGPU_0: + return false; + case SPV_ENV_OPENCL_1_2: + case SPV_ENV_OPENCL_EMBEDDED_1_2: + case SPV_ENV_OPENCL_2_0: + case SPV_ENV_OPENCL_EMBEDDED_2_0: + case SPV_ENV_OPENCL_EMBEDDED_2_1: + case SPV_ENV_OPENCL_EMBEDDED_2_2: + case SPV_ENV_OPENCL_2_1: + case SPV_ENV_OPENCL_2_2: + return true; + } + return false; +} + +bool spvIsWebGPUEnv(spv_target_env env) { + switch (env) { + case SPV_ENV_UNIVERSAL_1_0: + case SPV_ENV_VULKAN_1_0: + case SPV_ENV_UNIVERSAL_1_1: + case SPV_ENV_OPENGL_4_0: + case SPV_ENV_OPENGL_4_1: + case SPV_ENV_OPENGL_4_2: + case SPV_ENV_OPENGL_4_3: + case SPV_ENV_OPENGL_4_5: + case SPV_ENV_UNIVERSAL_1_2: + case SPV_ENV_UNIVERSAL_1_3: + case SPV_ENV_VULKAN_1_1: + case SPV_ENV_OPENCL_1_2: + case SPV_ENV_OPENCL_EMBEDDED_1_2: + case SPV_ENV_OPENCL_2_0: + case SPV_ENV_OPENCL_EMBEDDED_2_0: + case SPV_ENV_OPENCL_EMBEDDED_2_1: + case SPV_ENV_OPENCL_EMBEDDED_2_2: + case SPV_ENV_OPENCL_2_1: + case SPV_ENV_OPENCL_2_2: + return false; + case SPV_ENV_WEBGPU_0: + return true; + } + return false; +} diff --git a/3rdparty/spirv-tools/source/spirv_target_env.h b/3rdparty/spirv-tools/source/spirv_target_env.h index 7dc7be1d8..d1bd83512 100644 --- a/3rdparty/spirv-tools/source/spirv_target_env.h +++ b/3rdparty/spirv-tools/source/spirv_target_env.h @@ -24,6 +24,12 @@ bool spvParseTargetEnv(const char* s, spv_target_env* env); // Returns true if |env| is a VULKAN environment, false otherwise. bool spvIsVulkanEnv(spv_target_env env); +// Returns true if |env| is an OPENCL environment, false otherwise. +bool spvIsOpenCLEnv(spv_target_env env); + +// Returns true if |env| is an WEBGPU environment, false otherwise. +bool spvIsWebGPUEnv(spv_target_env env); + // Returns the version number for the given SPIR-V target environment. uint32_t spvVersionForTargetEnv(spv_target_env env); diff --git a/3rdparty/spirv-tools/source/spirv_validator_options.cpp b/3rdparty/spirv-tools/source/spirv_validator_options.cpp index 0c0625364..2e9cf2638 100644 --- a/3rdparty/spirv-tools/source/spirv_validator_options.cpp +++ b/3rdparty/spirv-tools/source/spirv_validator_options.cpp @@ -37,6 +37,8 @@ bool spvParseUniversalLimitsOptions(const char* s, spv_validator_limit* type) { *type = spv_validator_limit_max_control_flow_nesting_depth; } else if (match("--max-access-chain-indexes")) { *type = spv_validator_limit_max_access_chain_indexes; + } else if (match("--max-id-bound")) { + *type = spv_validator_limit_max_id_bound; } else { // The command line option for this validator limit has not been added. // Therefore we return false. @@ -73,6 +75,7 @@ void spvValidatorOptionsSetUniversalLimit(spv_validator_options options, max_control_flow_nesting_depth) LIMIT(spv_validator_limit_max_access_chain_indexes, max_access_chain_indexes) + LIMIT(spv_validator_limit_max_id_bound, max_id_bound) #undef LIMIT } } @@ -92,6 +95,11 @@ void spvValidatorOptionsSetRelaxBlockLayout(spv_validator_options options, options->relax_block_layout = val; } +void spvValidatorOptionsSetScalarBlockLayout(spv_validator_options options, + bool val) { + options->scalar_block_layout = val; +} + void spvValidatorOptionsSetSkipBlockLayout(spv_validator_options options, bool val) { options->skip_block_layout = val; diff --git a/3rdparty/spirv-tools/source/spirv_validator_options.h b/3rdparty/spirv-tools/source/spirv_validator_options.h index d264a7e0b..f426ebfef 100644 --- a/3rdparty/spirv-tools/source/spirv_validator_options.h +++ b/3rdparty/spirv-tools/source/spirv_validator_options.h @@ -32,6 +32,7 @@ struct validator_universal_limits_t { uint32_t max_function_args{255}; uint32_t max_control_flow_nesting_depth{1023}; uint32_t max_access_chain_indexes{255}; + uint32_t max_id_bound{0x3FFFFF}; }; // Manages command line options passed to the SPIR-V Validator. New struct @@ -42,12 +43,14 @@ struct spv_validator_options_t { relax_struct_store(false), relax_logical_pointer(false), relax_block_layout(false), + scalar_block_layout(false), skip_block_layout(false) {} validator_universal_limits_t universal_limits_; bool relax_struct_store; bool relax_logical_pointer; bool relax_block_layout; + bool scalar_block_layout; bool skip_block_layout; }; diff --git a/3rdparty/spirv-tools/source/text_handler.cpp b/3rdparty/spirv-tools/source/text_handler.cpp index 5f6e8c41f..c31f34a6b 100644 --- a/3rdparty/spirv-tools/source/text_handler.cpp +++ b/3rdparty/spirv-tools/source/text_handler.cpp @@ -313,7 +313,7 @@ spv_result_t AssemblyContext::binaryEncodeString(const char* value, pInst->words.back() = 0; char* dest = (char*)&pInst->words[oldWordCount]; - strncpy(dest, value, length); + strncpy(dest, value, length + 1); return SPV_SUCCESS; } diff --git a/3rdparty/spirv-tools/source/util/hex_float.h b/3rdparty/spirv-tools/source/util/hex_float.h index b7baf093b..cfc40fa68 100644 --- a/3rdparty/spirv-tools/source/util/hex_float.h +++ b/3rdparty/spirv-tools/source/util/hex_float.h @@ -672,7 +672,7 @@ class HexFloat { // If we are Nan or Inf we should pass that through. if (is_inf) { - other.set_value(BitwiseCast( + other.set_value(typename other_T::underlying_type( static_cast( (negate ? other_T::sign_mask : 0) | other_T::exponent_mask))); return; @@ -687,7 +687,7 @@ class HexFloat { // We are some sort of Nan. We try to keep the bit-pattern of the Nan // as close as possible. If we had to shift off bits so we are 0, then we // just set the last bit. - other.set_value(BitwiseCast( + other.set_value(typename other_T::underlying_type( static_cast( (negate ? other_T::sign_mask : 0) | other_T::exponent_mask | (shifted_significand == 0 ? 0x1 : shifted_significand)))); diff --git a/3rdparty/spirv-tools/source/util/string_utils.cpp b/3rdparty/spirv-tools/source/util/string_utils.cpp index 29ce2aa4a..b56c353af 100644 --- a/3rdparty/spirv-tools/source/util/string_utils.cpp +++ b/3rdparty/spirv-tools/source/util/string_utils.cpp @@ -37,5 +37,22 @@ std::string CardinalToOrdinal(size_t cardinal) { return ToString(cardinal) + suffix; } +std::pair SplitFlagArgs(const std::string& flag) { + if (flag.size() < 2) return make_pair(flag, std::string()); + + // Detect the last dash before the pass name. Since we have to + // handle single dash options (-O and -Os), count up to two dashes. + size_t dash_ix = 0; + if (flag[0] == '-' && flag[1] == '-') + dash_ix = 2; + else if (flag[0] == '-') + dash_ix = 1; + + size_t ix = flag.find('='); + return (ix != std::string::npos) + ? make_pair(flag.substr(dash_ix, ix - 2), flag.substr(ix + 1)) + : make_pair(flag.substr(dash_ix), std::string()); +} + } // namespace utils } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/util/string_utils.h b/3rdparty/spirv-tools/source/util/string_utils.h index 322c574fb..f1cd179c9 100644 --- a/3rdparty/spirv-tools/source/util/string_utils.h +++ b/3rdparty/spirv-tools/source/util/string_utils.h @@ -37,6 +37,11 @@ std::string ToString(T val) { // Converts cardinal number to ordinal number string. std::string CardinalToOrdinal(size_t cardinal); +// Splits the string |flag|, of the form '--pass_name[=pass_args]' into two +// strings "pass_name" and "pass_args". If |flag| has no arguments, the second +// string will be empty. +std::pair SplitFlagArgs(const std::string& flag); + } // namespace utils } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/construct.cpp b/3rdparty/spirv-tools/source/val/construct.cpp index c11a065b7..7b0cb2dcc 100644 --- a/3rdparty/spirv-tools/source/val/construct.cpp +++ b/3rdparty/spirv-tools/source/val/construct.cpp @@ -116,7 +116,10 @@ Construct::ConstructBlockSet Construct::blocks(Function* function) const { if (merge != block) { for (auto succ : *block->successors()) { - stack.push_back(succ); + // All blocks in the construct must be dominated by the header. + if (header->dominates(*succ)) { + stack.push_back(succ); + } } } } diff --git a/3rdparty/spirv-tools/source/val/validate.cpp b/3rdparty/spirv-tools/source/val/validate.cpp index 84ec193a1..5d0c6243f 100644 --- a/3rdparty/spirv-tools/source/val/validate.cpp +++ b/3rdparty/spirv-tools/source/val/validate.cpp @@ -42,6 +42,12 @@ #include "source/val/validation_state.h" #include "spirv-tools/libspirv.h" +namespace { +// TODO(issue 1950): The validator only returns a single message anyway, so no +// point in generating more than 1 warning. +static uint32_t kDefaultMaxNumOfWarnings = 1; +} // namespace + namespace spvtools { namespace val { namespace { @@ -110,18 +116,18 @@ void printDot(const ValidationState_t& _, const BasicBlock& other) { block_string += "end "; } else { for (auto block : *other.successors()) { - block_string += _.getIdOrName(block->id()) + " "; + block_string += _.getIdName(block->id()) + " "; } } - printf("%10s -> {%s\b}\n", _.getIdOrName(other.id()).c_str(), + printf("%10s -> {%s\b}\n", _.getIdName(other.id()).c_str(), block_string.c_str()); } void PrintBlocks(ValidationState_t& _, Function func) { assert(func.first_block()); - printf("%10s -> %s\n", _.getIdOrName(func.id()).c_str(), - _.getIdOrName(func.first_block()->id()).c_str()); + printf("%10s -> %s\n", _.getIdName(func.id()).c_str(), + _.getIdName(func.first_block()->id()).c_str()); for (const auto& block : func.ordered_blocks()) { printDot(_, *block); } @@ -139,7 +145,7 @@ void PrintBlocks(ValidationState_t& _, Function func) { UNUSED(void PrintDotGraph(ValidationState_t& _, Function func)) { if (func.first_block()) { - std::string func_name(_.getIdOrName(func.id())); + std::string func_name(_.getIdName(func.id())); printf("digraph %s {\n", func_name.c_str()); PrintBlocks(_, func); printf("}\n"); @@ -169,14 +175,19 @@ spv_result_t ValidateForwardDecls(ValidationState_t& _) { // capability is being used. // * No function can be targeted by both an OpEntryPoint instruction and an // OpFunctionCall instruction. +// +// Additionally enforces that entry points for Vulkan and WebGPU should not have +// recursion. spv_result_t ValidateEntryPoints(ValidationState_t& _) { _.ComputeFunctionToEntryPointMapping(); + _.ComputeRecursiveEntryPoints(); if (_.entry_points().empty() && !_.HasCapability(SpvCapabilityLinkage)) { return _.diag(SPV_ERROR_INVALID_BINARY, nullptr) << "No OpEntryPoint instruction was found. This is only allowed if " "the Linkage capability is being used."; } + for (const auto& entry_point : _.entry_points()) { if (_.IsFunctionCallTarget(entry_point)) { return _.diag(SPV_ERROR_INVALID_BINARY, _.FindDef(entry_point)) @@ -184,6 +195,17 @@ spv_result_t ValidateEntryPoints(ValidationState_t& _) { << ") may not be targeted by both an OpEntryPoint instruction and " "an OpFunctionCall instruction."; } + + // For Vulkan and WebGPU, the static function-call graph for an entry point + // must not contain cycles. + if (spvIsWebGPUEnv(_.context()->target_env) || + spvIsVulkanEnv(_.context()->target_env)) { + if (_.recursive_entry_points().find(entry_point) != + _.recursive_entry_points().end()) { + return _.diag(SPV_ERROR_INVALID_BINARY, _.FindDef(entry_point)) + << "Entry points may not have a call graph with cycles."; + } + } } return SPV_SUCCESS; @@ -220,8 +242,21 @@ spv_result_t ValidateBinaryUsingContextAndValidationState( << spvTargetEnvDescription(context.target_env) << "."; } + if (header.bound > vstate->options()->universal_limits_.max_id_bound) { + return DiagnosticStream(position, context.consumer, "", + SPV_ERROR_INVALID_BINARY) + << "Invalid SPIR-V. The id bound is larger than the max id bound " + << vstate->options()->universal_limits_.max_id_bound << "."; + } + // Look for OpExtension instructions and register extensions. - spvBinaryParse(&context, vstate, words, num_words, + // This parse should not produce any error messages. Hijack the context and + // replace the message consumer so that we do not pollute any state in input + // consumer. + spv_context_t hijacked_context = context; + hijacked_context.consumer = [](spv_message_level_t, const char*, + const spv_position_t&, const char*) {}; + spvBinaryParse(&hijacked_context, vstate, words, num_words, /* parsed_header = */ nullptr, ProcessExtensions, /* diagnostic = */ nullptr); @@ -260,7 +295,15 @@ spv_result_t ValidateBinaryUsingContextAndValidationState( << "A FunctionCall must happen within a function body."; } - vstate->AddFunctionCallTarget(inst->GetOperandAs(2)); + const auto called_id = inst->GetOperandAs(2); + if (spvIsWebGPUEnv(context.target_env) && + !vstate->IsFunctionCallDefined(called_id)) { + return vstate->diag(SPV_ERROR_INVALID_LAYOUT, &instruction) + << "For WebGPU, functions need to be defined before being " + "called."; + } + + vstate->AddFunctionCallTarget(called_id); } if (vstate->in_function_body()) { @@ -309,12 +352,11 @@ spv_result_t ValidateBinaryUsingContextAndValidationState( // Miscellaneous if (auto error = DebugPass(*vstate, &instruction)) return error; if (auto error = AnnotationPass(*vstate, &instruction)) return error; - if (auto error = ExtInstPass(*vstate, &instruction)) return error; + if (auto error = ExtensionPass(*vstate, &instruction)) return error; if (auto error = ModeSettingPass(*vstate, &instruction)) return error; if (auto error = TypePass(*vstate, &instruction)) return error; if (auto error = ConstantPass(*vstate, &instruction)) return error; - if (auto error = ValidateMemoryInstructions(*vstate, &instruction)) - return error; + if (auto error = MemoryPass(*vstate, &instruction)) return error; if (auto error = FunctionPass(*vstate, &instruction)) return error; if (auto error = ImagePass(*vstate, &instruction)) return error; if (auto error = ConversionPass(*vstate, &instruction)) return error; @@ -333,11 +375,12 @@ spv_result_t ValidateBinaryUsingContextAndValidationState( if (auto error = NonUniformPass(*vstate, &instruction)) return error; if (auto error = LiteralsPass(*vstate, &instruction)) return error; - // Validate the preconditions involving adjacent instructions. e.g. SpvOpPhi - // must only be preceeded by SpvOpLabel, SpvOpPhi, or SpvOpLine. - if (auto error = ValidateAdjacency(*vstate, i)) return error; } + // Validate the preconditions involving adjacent instructions. e.g. SpvOpPhi + // must only be preceeded by SpvOpLabel, SpvOpPhi, or SpvOpLine. + if (auto error = ValidateAdjacency(*vstate)) return error; + if (auto error = ValidateEntryPoints(*vstate)) return error; // CFG checks are performed after the binary has been parsed // and the CFGPass has collected information about the control flow @@ -369,8 +412,8 @@ spv_result_t ValidateBinaryAndKeepValidationState( UseDiagnosticAsMessageConsumer(&hijack_context, pDiagnostic); } - vstate->reset( - new ValidationState_t(&hijack_context, options, words, num_words)); + vstate->reset(new ValidationState_t(&hijack_context, options, words, + num_words, kDefaultMaxNumOfWarnings)); return ValidateBinaryUsingContextAndValidationState( hijack_context, words, num_words, pDiagnostic, vstate->get()); @@ -400,7 +443,8 @@ spv_result_t spvValidateBinary(const spv_const_context context, // Create the ValidationState using the context and default options. spvtools::val::ValidationState_t vstate(&hijack_context, default_options, - words, num_words); + words, num_words, + kDefaultMaxNumOfWarnings); spv_result_t result = spvtools::val::ValidateBinaryUsingContextAndValidationState( @@ -422,7 +466,8 @@ spv_result_t spvValidateWithOptions(const spv_const_context context, // Create the ValidationState using the context. spvtools::val::ValidationState_t vstate(&hijack_context, options, - binary->code, binary->wordCount); + binary->code, binary->wordCount, + kDefaultMaxNumOfWarnings); return spvtools::val::ValidateBinaryUsingContextAndValidationState( hijack_context, binary->code, binary->wordCount, pDiagnostic, &vstate); diff --git a/3rdparty/spirv-tools/source/val/validate.h b/3rdparty/spirv-tools/source/val/validate.h index 4599c4a86..fe357a2f8 100644 --- a/3rdparty/spirv-tools/source/val/validate.h +++ b/3rdparty/spirv-tools/source/val/validate.h @@ -63,7 +63,7 @@ spv_result_t UpdateIdUse(ValidationState_t& _, const Instruction* inst); /// @param[in] _ the validation state of the module /// /// @return SPV_SUCCESS if no errors are found. SPV_ERROR_INVALID_ID otherwise -spv_result_t CheckIdDefinitionDominateUse(const ValidationState_t& _); +spv_result_t CheckIdDefinitionDominateUse(ValidationState_t& _); /// @brief This function checks for preconditions involving the adjacent /// instructions. @@ -75,7 +75,7 @@ spv_result_t CheckIdDefinitionDominateUse(const ValidationState_t& _); /// @param[in] _ the validation state of the module /// /// @return SPV_SUCCESS if no errors are found. SPV_ERROR_INVALID_DATA otherwise -spv_result_t ValidateAdjacency(ValidationState_t& _, size_t idx); +spv_result_t ValidateAdjacency(ValidationState_t& _); /// @brief Validates static uses of input and output variables /// @@ -91,8 +91,7 @@ spv_result_t ValidateInterfaces(ValidationState_t& _); /// /// @param[in] _ the validation state of the module /// @return SPV_SUCCESS if no errors are found. -spv_result_t ValidateMemoryInstructions(ValidationState_t& _, - const Instruction* inst); +spv_result_t MemoryPass(ValidationState_t& _, const Instruction* inst); /// @brief Updates the immediate dominator for each of the block edges /// @@ -132,11 +131,12 @@ spv_result_t DataRulesPass(ValidationState_t& _, const Instruction* inst); /// Performs instruction validation. spv_result_t InstructionPass(ValidationState_t& _, const Instruction* inst); -/// Performs decoration validation. +/// Performs decoration validation. Assumes each decoration on a group +/// has been propagated down to the group members. spv_result_t ValidateDecorations(ValidationState_t& _); /// Performs validation of built-in variables. -spv_result_t ValidateBuiltIns(const ValidationState_t& _); +spv_result_t ValidateBuiltIns(ValidationState_t& _); /// Validates type instructions. spv_result_t TypePass(ValidationState_t& _, const Instruction* inst); @@ -174,8 +174,8 @@ spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst); /// Validates correctness of literal numbers. spv_result_t LiteralsPass(ValidationState_t& _, const Instruction* inst); -/// Validates correctness of ExtInst instructions. -spv_result_t ExtInstPass(ValidationState_t& _, const Instruction* inst); +/// Validates correctness of extension instructions. +spv_result_t ExtensionPass(ValidationState_t& _, const Instruction* inst); /// Validates correctness of annotation instructions. spv_result_t AnnotationPass(ValidationState_t& _, const Instruction* inst); diff --git a/3rdparty/spirv-tools/source/val/validate_adjacency.cpp b/3rdparty/spirv-tools/source/val/validate_adjacency.cpp index 5ef56be99..108e36106 100644 --- a/3rdparty/spirv-tools/source/val/validate_adjacency.cpp +++ b/3rdparty/spirv-tools/source/val/validate_adjacency.cpp @@ -27,56 +27,88 @@ namespace spvtools { namespace val { -spv_result_t ValidateAdjacency(ValidationState_t& _, size_t idx) { - const auto& instructions = _.ordered_instructions(); - const auto& inst = instructions[idx]; +enum { + // Status right after meeting OpFunction. + IN_NEW_FUNCTION, + // Status right after meeting the entry block. + IN_ENTRY_BLOCK, + // Status right after meeting non-entry blocks. + PHI_VALID, + // Status right after meeting non-OpVariable instructions in the entry block + // or non-OpPhi instructions in non-entry blocks, except OpLine. + PHI_AND_VAR_INVALID, +}; - switch (inst.opcode()) { - case SpvOpPhi: - if (idx > 0) { - switch (instructions[idx - 1].opcode()) { - case SpvOpLabel: - case SpvOpPhi: - case SpvOpLine: - break; - default: - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << "OpPhi must appear before all non-OpPhi instructions " - << "(except for OpLine, which can be mixed with OpPhi)."; +spv_result_t ValidateAdjacency(ValidationState_t& _) { + const auto& instructions = _.ordered_instructions(); + int adjacency_status = PHI_AND_VAR_INVALID; + + for (size_t i = 0; i < instructions.size(); ++i) { + const auto& inst = instructions[i]; + switch (inst.opcode()) { + case SpvOpFunction: + case SpvOpFunctionParameter: + adjacency_status = IN_NEW_FUNCTION; + break; + case SpvOpLabel: + adjacency_status = + adjacency_status == IN_NEW_FUNCTION ? IN_ENTRY_BLOCK : PHI_VALID; + break; + case SpvOpPhi: + if (adjacency_status != PHI_VALID) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << "OpPhi must appear within a non-entry block before all " + << "non-OpPhi instructions " + << "(except for OpLine, which can be mixed with OpPhi)."; } - } - break; - case SpvOpLoopMerge: - if (idx != (instructions.size() - 1)) { - switch (instructions[idx + 1].opcode()) { - case SpvOpBranch: - case SpvOpBranchConditional: - break; - default: - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << "OpLoopMerge must immediately precede either an " - << "OpBranch or OpBranchConditional instruction. " - << "OpLoopMerge must be the second-to-last instruction in " - << "its block."; + break; + case SpvOpLine: + case SpvOpNoLine: + break; + case SpvOpLoopMerge: + adjacency_status = PHI_AND_VAR_INVALID; + if (i != (instructions.size() - 1)) { + switch (instructions[i + 1].opcode()) { + case SpvOpBranch: + case SpvOpBranchConditional: + break; + default: + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << "OpLoopMerge must immediately precede either an " + << "OpBranch or OpBranchConditional instruction. " + << "OpLoopMerge must be the second-to-last instruction in " + << "its block."; + } } - } - break; - case SpvOpSelectionMerge: - if (idx != (instructions.size() - 1)) { - switch (instructions[idx + 1].opcode()) { - case SpvOpBranchConditional: - case SpvOpSwitch: - break; - default: - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << "OpSelectionMerge must immediately precede either an " - << "OpBranchConditional or OpSwitch instruction. " - << "OpSelectionMerge must be the second-to-last " - << "instruction in its block."; + break; + case SpvOpSelectionMerge: + adjacency_status = PHI_AND_VAR_INVALID; + if (i != (instructions.size() - 1)) { + switch (instructions[i + 1].opcode()) { + case SpvOpBranchConditional: + case SpvOpSwitch: + break; + default: + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << "OpSelectionMerge must immediately precede either an " + << "OpBranchConditional or OpSwitch instruction. " + << "OpSelectionMerge must be the second-to-last " + << "instruction in its block."; + } } - } - default: - break; + break; + case SpvOpVariable: + if (inst.GetOperandAs(2) == SpvStorageClassFunction && + adjacency_status != IN_ENTRY_BLOCK) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << "All OpVariable instructions in a function must be the " + "first instructions in the first block."; + } + break; + default: + adjacency_status = PHI_AND_VAR_INVALID; + break; + } } return SPV_SUCCESS; diff --git a/3rdparty/spirv-tools/source/val/validate_annotation.cpp b/3rdparty/spirv-tools/source/val/validate_annotation.cpp index f1758391d..621ace2a6 100644 --- a/3rdparty/spirv-tools/source/val/validate_annotation.cpp +++ b/3rdparty/spirv-tools/source/val/validate_annotation.cpp @@ -15,6 +15,7 @@ #include "source/val/validate.h" #include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" #include "source/val/validation_state.h" @@ -50,7 +51,7 @@ spv_result_t ValidateMemberDecorate(ValidationState_t& _, const auto member = inst->GetOperandAs(1); const auto member_count = static_cast(struct_type->words().size() - 2); - if (member_count < member) { + if (member_count <= member) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "Index " << member << " provided in OpMemberDecorate for struct " @@ -63,6 +64,12 @@ spv_result_t ValidateMemberDecorate(ValidationState_t& _, spv_result_t ValidateDecorationGroup(ValidationState_t& _, const Instruction* inst) { + if (spvIsWebGPUEnv(_.context()->target_env)) { + return _.diag(SPV_ERROR_INVALID_BINARY, inst) + << "OpDecorationGroup is not allowed in the WebGPU execution " + << "environment."; + } + const auto decoration_group_id = inst->GetOperandAs(0); const auto decoration_group = _.FindDef(decoration_group_id); for (auto pair : decoration_group->uses()) { @@ -81,6 +88,12 @@ spv_result_t ValidateDecorationGroup(ValidationState_t& _, spv_result_t ValidateGroupDecorate(ValidationState_t& _, const Instruction* inst) { + if (spvIsWebGPUEnv(_.context()->target_env)) { + return _.diag(SPV_ERROR_INVALID_BINARY, inst) + << "OpGroupDecorate is not allowed in the WebGPU execution " + << "environment."; + } + const auto decoration_group_id = inst->GetOperandAs(0); auto decoration_group = _.FindDef(decoration_group_id); if (!decoration_group || SpvOpDecorationGroup != decoration_group->opcode()) { @@ -89,11 +102,26 @@ spv_result_t ValidateGroupDecorate(ValidationState_t& _, << _.getIdName(decoration_group_id) << "' is not a decoration group."; } + for (unsigned i = 1; i < inst->operands().size(); ++i) { + auto target_id = inst->GetOperandAs(i); + auto target = _.FindDef(target_id); + if (!target || target->opcode() == SpvOpDecorationGroup) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpGroupDecorate may not target OpDecorationGroup '" + << _.getIdName(target_id) << "'"; + } + } return SPV_SUCCESS; } spv_result_t ValidateGroupMemberDecorate(ValidationState_t& _, const Instruction* inst) { + if (spvIsWebGPUEnv(_.context()->target_env)) { + return _.diag(SPV_ERROR_INVALID_BINARY, inst) + << "OpGroupMemberDecorate is not allowed in the WebGPU execution " + << "environment."; + } + const auto decoration_group_id = inst->GetOperandAs(0); const auto decoration_group = _.FindDef(decoration_group_id); if (!decoration_group || SpvOpDecorationGroup != decoration_group->opcode()) { @@ -128,6 +156,79 @@ spv_result_t ValidateGroupMemberDecorate(ValidationState_t& _, return SPV_SUCCESS; } +// Registers necessary decoration(s) for the appropriate IDs based on the +// instruction. +spv_result_t RegisterDecorations(ValidationState_t& _, + const Instruction* inst) { + switch (inst->opcode()) { + case SpvOpDecorate: { + const uint32_t target_id = inst->word(1); + const SpvDecoration dec_type = static_cast(inst->word(2)); + std::vector dec_params; + if (inst->words().size() > 3) { + dec_params.insert(dec_params.end(), inst->words().begin() + 3, + inst->words().end()); + } + _.RegisterDecorationForId(target_id, Decoration(dec_type, dec_params)); + break; + } + case SpvOpMemberDecorate: { + const uint32_t struct_id = inst->word(1); + const uint32_t index = inst->word(2); + const SpvDecoration dec_type = static_cast(inst->word(3)); + std::vector dec_params; + if (inst->words().size() > 4) { + dec_params.insert(dec_params.end(), inst->words().begin() + 4, + inst->words().end()); + } + _.RegisterDecorationForId(struct_id, + Decoration(dec_type, dec_params, index)); + break; + } + case SpvOpDecorationGroup: { + // We don't need to do anything right now. Assigning decorations to groups + // will be taken care of via OpGroupDecorate. + break; + } + case SpvOpGroupDecorate: { + // Word 1 is the group . All subsequent words are target s that + // are going to be decorated with the decorations. + const uint32_t decoration_group_id = inst->word(1); + std::vector& group_decorations = + _.id_decorations(decoration_group_id); + for (size_t i = 2; i < inst->words().size(); ++i) { + const uint32_t target_id = inst->word(i); + _.RegisterDecorationsForId(target_id, group_decorations.begin(), + group_decorations.end()); + } + break; + } + case SpvOpGroupMemberDecorate: { + // Word 1 is the Decoration Group followed by (struct,literal) + // pairs. All decorations of the group should be applied to all the struct + // members that are specified in the instructions. + const uint32_t decoration_group_id = inst->word(1); + std::vector& group_decorations = + _.id_decorations(decoration_group_id); + // Grammar checks ensures that the number of arguments to this instruction + // is an odd number: 1 decoration group + (id,literal) pairs. + for (size_t i = 2; i + 1 < inst->words().size(); i = i + 2) { + const uint32_t struct_id = inst->word(i); + const uint32_t index = inst->word(i + 1); + // ID validation phase ensures this is in fact a struct instruction and + // that the index is not out of bound. + _.RegisterDecorationsForStructMember(struct_id, index, + group_decorations.begin(), + group_decorations.end()); + } + break; + } + default: + break; + } + return SPV_SUCCESS; +} + } // namespace spv_result_t AnnotationPass(ValidationState_t& _, const Instruction* inst) { @@ -151,6 +252,10 @@ spv_result_t AnnotationPass(ValidationState_t& _, const Instruction* inst) { break; } + // In order to validate decoration rules, we need to know all the decorations + // that are applied to any given . + RegisterDecorations(_, inst); + return SPV_SUCCESS; } diff --git a/3rdparty/spirv-tools/source/val/validate_atomics.cpp b/3rdparty/spirv-tools/source/val/validate_atomics.cpp index becb87200..6bfd06d4e 100644 --- a/3rdparty/spirv-tools/source/val/validate_atomics.cpp +++ b/3rdparty/spirv-tools/source/val/validate_atomics.cpp @@ -21,136 +21,13 @@ #include "source/spirv_target_env.h" #include "source/util/bitutils.h" #include "source/val/instruction.h" +#include "source/val/validate_memory_semantics.h" +#include "source/val/validate_scopes.h" #include "source/val/validation_state.h" namespace spvtools { namespace val { -// Validates Memory Scope operand. -spv_result_t ValidateMemoryScope(ValidationState_t& _, const Instruction* inst, - uint32_t id) { - const SpvOp opcode = inst->opcode(); - bool is_int32 = false, is_const_int32 = false; - uint32_t value = 0; - std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(id); - - if (!is_int32) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) << ": expected Scope to be 32-bit int"; - } - - if (!is_const_int32) { - return SPV_SUCCESS; - } - -#if 0 - // TODO(atgoo@github.com): this check fails Vulkan CTS, reenable once fixed. - if (spvIsVulkanEnv(_.context()->target_env)) { - if (value != SpvScopeDevice && value != SpvScopeWorkgroup && - value != SpvScopeInvocation) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": in Vulkan environment memory scope is limited to Device, " - "Workgroup and Invocation"; - } - } -#endif - - // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. - - return SPV_SUCCESS; -} - -// Validates a Memory Semantics operand. -spv_result_t ValidateMemorySemantics(ValidationState_t& _, - const Instruction* inst, - uint32_t operand_index) { - const SpvOp opcode = inst->opcode(); - bool is_int32 = false, is_const_int32 = false; - uint32_t flags = 0; - auto memory_semantics_id = inst->GetOperandAs(operand_index); - std::tie(is_int32, is_const_int32, flags) = - _.EvalInt32IfConst(memory_semantics_id); - - if (!is_int32) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Memory Semantics to be 32-bit int"; - } - - if (!is_const_int32) { - return SPV_SUCCESS; - } - - if (spvtools::utils::CountSetBits( - flags & - (SpvMemorySemanticsAcquireMask | SpvMemorySemanticsReleaseMask | - SpvMemorySemanticsAcquireReleaseMask | - SpvMemorySemanticsSequentiallyConsistentMask)) > 1) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": no more than one of the following Memory Semantics bits can " - "be set at the same time: Acquire, Release, AcquireRelease or " - "SequentiallyConsistent"; - } - - if (flags & SpvMemorySemanticsUniformMemoryMask && - !_.HasCapability(SpvCapabilityShader)) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": Memory Semantics UniformMemory requires capability Shader"; - } - - if (flags & SpvMemorySemanticsAtomicCounterMemoryMask && - !_.HasCapability(SpvCapabilityAtomicStorage)) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": Memory Semantics UniformMemory requires capability " - "AtomicStorage"; - } - - if (opcode == SpvOpAtomicFlagClear && - (flags & SpvMemorySemanticsAcquireMask || - flags & SpvMemorySemanticsAcquireReleaseMask)) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Memory Semantics Acquire and AcquireRelease cannot be used with " - << spvOpcodeString(opcode); - } - - if (opcode == SpvOpAtomicCompareExchange && operand_index == 5 && - (flags & SpvMemorySemanticsReleaseMask || - flags & SpvMemorySemanticsAcquireReleaseMask)) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": Memory Semantics Release and AcquireRelease cannot be used " - "for operand Unequal"; - } - - if (spvIsVulkanEnv(_.context()->target_env)) { - if (opcode == SpvOpAtomicLoad && - (flags & SpvMemorySemanticsReleaseMask || - flags & SpvMemorySemanticsAcquireReleaseMask || - flags & SpvMemorySemanticsSequentiallyConsistentMask)) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Vulkan spec disallows OpAtomicLoad with Memory Semantics " - "Release, AcquireRelease and SequentiallyConsistent"; - } - - if (opcode == SpvOpAtomicStore && - (flags & SpvMemorySemanticsAcquireMask || - flags & SpvMemorySemanticsAcquireReleaseMask || - flags & SpvMemorySemanticsSequentiallyConsistentMask)) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Vulkan spec disallows OpAtomicStore with Memory Semantics " - "Acquire, AcquireRelease and SequentiallyConsistent"; - } - } - - // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. - - return SPV_SUCCESS; -} - // Validates correctness of atomic instructions. spv_result_t AtomicsPass(ValidationState_t& _, const Instruction* inst) { const SpvOp opcode = inst->opcode(); @@ -200,10 +77,33 @@ spv_result_t AtomicsPass(ValidationState_t& _, const Instruction* inst) { } if (spvIsVulkanEnv(_.context()->target_env) && _.GetBitWidth(result_type) != 32) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": according to the Vulkan spec atomic Result Type needs " - "to be a 32-bit int scalar type"; + switch (opcode) { + case SpvOpAtomicSMin: + case SpvOpAtomicUMin: + case SpvOpAtomicSMax: + case SpvOpAtomicUMax: + case SpvOpAtomicAnd: + case SpvOpAtomicOr: + case SpvOpAtomicXor: + case SpvOpAtomicIAdd: + case SpvOpAtomicLoad: + case SpvOpAtomicStore: + case SpvOpAtomicExchange: + case SpvOpAtomicCompareExchange: { + if (_.GetBitWidth(result_type) == 64 && + !_.HasCapability(SpvCapabilityInt64Atomics)) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": 64-bit atomics require the Int64Atomics " + "capability"; + } break; + default: + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": according to the Vulkan spec atomic Result Type " + "needs " + "to be a 32-bit int scalar type"; + } } } @@ -229,11 +129,21 @@ spv_result_t AtomicsPass(ValidationState_t& _, const Instruction* inst) { case SpvStorageClassStorageBuffer: break; default: - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Pointer Storage Class to be Uniform, " - "Workgroup, CrossWorkgroup, Generic, AtomicCounter, Image " - "or StorageBuffer"; + if (spvIsOpenCLEnv(_.context()->target_env)) { + if (storage_class != SpvStorageClassFunction) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Pointer Storage Class to be Uniform, " + "Workgroup, CrossWorkgroup, Generic, AtomicCounter, " + "Image, StorageBuffer or Function"; + } + } else { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Pointer Storage Class to be Uniform, " + "Workgroup, CrossWorkgroup, Generic, AtomicCounter, " + "Image or StorageBuffer"; + } } if (opcode == SpvOpAtomicFlagTestAndSet || @@ -278,9 +188,8 @@ spv_result_t AtomicsPass(ValidationState_t& _, const Instruction* inst) { if (value_type != data_type) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << spvOpcodeString(opcode) - << ": expected Value type and the type pointed to by Pointer " - "to" - << " be the same"; + << ": expected Value type and the type pointed to by " + "Pointer to be the same"; } } else if (opcode != SpvOpAtomicLoad && opcode != SpvOpAtomicIIncrement && opcode != SpvOpAtomicIDecrement && diff --git a/3rdparty/spirv-tools/source/val/validate_barriers.cpp b/3rdparty/spirv-tools/source/val/validate_barriers.cpp index 0771f2d28..4fbe9c90a 100644 --- a/3rdparty/spirv-tools/source/val/validate_barriers.cpp +++ b/3rdparty/spirv-tools/source/val/validate_barriers.cpp @@ -24,173 +24,12 @@ #include "source/spirv_target_env.h" #include "source/util/bitutils.h" #include "source/val/instruction.h" +#include "source/val/validate_memory_semantics.h" +#include "source/val/validate_scopes.h" #include "source/val/validation_state.h" namespace spvtools { namespace val { -namespace { - -// Validates Execution Scope operand. -spv_result_t ValidateExecutionScope(ValidationState_t& _, - const Instruction* inst, uint32_t id) { - const SpvOp opcode = inst->opcode(); - bool is_int32 = false, is_const_int32 = false; - uint32_t value = 0; - std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(id); - - if (!is_int32) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Execution Scope to be a 32-bit int"; - } - - if (!is_const_int32) { - return SPV_SUCCESS; - } - - if (spvIsVulkanEnv(_.context()->target_env)) { - if (value != SpvScopeWorkgroup && value != SpvScopeSubgroup) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": in Vulkan environment Execution Scope is limited to " - "Workgroup and Subgroup"; - } - - if (_.context()->target_env != SPV_ENV_VULKAN_1_0 && - value != SpvScopeSubgroup) { - _.function(inst->function()->id()) - ->RegisterExecutionModelLimitation([](SpvExecutionModel model, - std::string* message) { - if (model == SpvExecutionModelFragment || - model == SpvExecutionModelVertex || - model == SpvExecutionModelGeometry || - model == SpvExecutionModelTessellationEvaluation) { - if (message) { - *message = - "in Vulkan evironment, OpControlBarrier execution scope " - "must be Subgroup for Fragment, Vertex, Geometry and " - "TessellationEvaluation execution models"; - } - return false; - } - return true; - }); - } - } - - // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. - - return SPV_SUCCESS; -} - -// Validates Memory Scope operand. -spv_result_t ValidateMemoryScope(ValidationState_t& _, const Instruction* inst, - uint32_t id) { - const SpvOp opcode = inst->opcode(); - bool is_int32 = false, is_const_int32 = false; - uint32_t value = 0; - std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(id); - - if (!is_int32) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Memory Scope to be a 32-bit int"; - } - - if (!is_const_int32) { - return SPV_SUCCESS; - } - - if (spvIsVulkanEnv(_.context()->target_env)) { - if (value == SpvScopeCrossDevice) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": in Vulkan environment, Memory Scope cannot be CrossDevice"; - } - if (_.context()->target_env == SPV_ENV_VULKAN_1_0 && - value != SpvScopeDevice && value != SpvScopeWorkgroup && - value != SpvScopeInvocation) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": in Vulkan 1.0 environment Memory Scope is limited to " - "Device, " - "Workgroup and Invocation"; - } - } - - // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. - - return SPV_SUCCESS; -} - -// Validates Memory Semantics operand. -spv_result_t ValidateMemorySemantics(ValidationState_t& _, - const Instruction* inst, uint32_t id) { - const SpvOp opcode = inst->opcode(); - bool is_int32 = false, is_const_int32 = false; - uint32_t value = 0; - std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(id); - - if (!is_int32) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Memory Semantics to be a 32-bit int"; - } - - if (!is_const_int32) { - return SPV_SUCCESS; - } - - const size_t num_memory_order_set_bits = spvtools::utils::CountSetBits( - value & (SpvMemorySemanticsAcquireMask | SpvMemorySemanticsReleaseMask | - SpvMemorySemanticsAcquireReleaseMask | - SpvMemorySemanticsSequentiallyConsistentMask)); - - if (num_memory_order_set_bits > 1) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": Memory Semantics can have at most one of the following bits " - "set: Acquire, Release, AcquireRelease or SequentiallyConsistent"; - } - - if (spvIsVulkanEnv(_.context()->target_env)) { - const bool includes_storage_class = - value & (SpvMemorySemanticsUniformMemoryMask | - SpvMemorySemanticsWorkgroupMemoryMask | - SpvMemorySemanticsImageMemoryMask); - - if (opcode == SpvOpMemoryBarrier && !num_memory_order_set_bits) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": Vulkan specification requires Memory Semantics to have one " - "of the following bits set: Acquire, Release, AcquireRelease " - "or SequentiallyConsistent"; - } - - if (opcode == SpvOpMemoryBarrier && !includes_storage_class) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Memory Semantics to include a Vulkan-supported " - "storage class"; - } - -#if 0 - // TODO(atgoo@github.com): this check fails Vulkan CTS, reenable once fixed. - if (opcode == SpvOpControlBarrier && value && !includes_storage_class) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Memory Semantics to include a Vulkan-supported " - "storage class if Memory Semantics is not None"; - } -#endif - } - - // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. - - return SPV_SUCCESS; -} - -} // namespace // Validates correctness of barrier instructions. spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst) { @@ -206,7 +45,9 @@ spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst) { [](SpvExecutionModel model, std::string* message) { if (model != SpvExecutionModelTessellationControl && model != SpvExecutionModelGLCompute && - model != SpvExecutionModelKernel) { + model != SpvExecutionModelKernel && + model != SpvExecutionModelTaskNV && + model != SpvExecutionModelMeshNV) { if (message) { *message = "OpControlBarrier requires one of the following " @@ -221,7 +62,6 @@ spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst) { const uint32_t execution_scope = inst->word(1); const uint32_t memory_scope = inst->word(2); - const uint32_t memory_semantics = inst->word(3); if (auto error = ValidateExecutionScope(_, inst, execution_scope)) { return error; @@ -231,7 +71,7 @@ spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst) { return error; } - if (auto error = ValidateMemorySemantics(_, inst, memory_semantics)) { + if (auto error = ValidateMemorySemantics(_, inst, 2)) { return error; } break; @@ -239,13 +79,12 @@ spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst) { case SpvOpMemoryBarrier: { const uint32_t memory_scope = inst->word(1); - const uint32_t memory_semantics = inst->word(2); if (auto error = ValidateMemoryScope(_, inst, memory_scope)) { return error; } - if (auto error = ValidateMemorySemantics(_, inst, memory_semantics)) { + if (auto error = ValidateMemorySemantics(_, inst, 1)) { return error; } break; @@ -277,13 +116,12 @@ spv_result_t BarriersPass(ValidationState_t& _, const Instruction* inst) { } const uint32_t memory_scope = inst->word(2); - const uint32_t memory_semantics = inst->word(3); if (auto error = ValidateMemoryScope(_, inst, memory_scope)) { return error; } - if (auto error = ValidateMemorySemantics(_, inst, memory_semantics)) { + if (auto error = ValidateMemorySemantics(_, inst, 2)) { return error; } break; diff --git a/3rdparty/spirv-tools/source/val/validate_builtins.cpp b/3rdparty/spirv-tools/source/val/validate_builtins.cpp index c791e428f..aaba32490 100644 --- a/3rdparty/spirv-tools/source/val/validate_builtins.cpp +++ b/3rdparty/spirv-tools/source/val/validate_builtins.cpp @@ -55,7 +55,7 @@ std::string GetIdDesc(const Instruction& inst) { // the Vulkan spec. // TODO: If non-Vulkan validation rules are added then it might need // to be refactored. -spv_result_t GetUnderlyingType(const ValidationState_t& _, +spv_result_t GetUnderlyingType(ValidationState_t& _, const Decoration& decoration, const Instruction& inst, uint32_t* underlying_type) { @@ -106,7 +106,7 @@ SpvStorageClass GetStorageClass(const Instruction& inst) { // ValidationState_t to be made available to other users. class BuiltInsValidator { public: - BuiltInsValidator(const ValidationState_t& vstate) : _(vstate) {} + BuiltInsValidator(ValidationState_t& vstate) : _(vstate) {} // Run validation. spv_result_t Run(); @@ -167,6 +167,8 @@ class BuiltInsValidator { const Instruction& inst); spv_result_t ValidateVertexIndexAtDefinition(const Decoration& decoration, const Instruction& inst); + spv_result_t ValidateVertexIdOrInstanceIdAtDefinition( + const Decoration& decoration, const Instruction& inst); spv_result_t ValidateWorkgroupSizeAtDefinition(const Decoration& decoration, const Instruction& inst); // Used for GlobalInvocationId, LocalInvocationId, NumWorkgroups, WorkgroupId. @@ -205,6 +207,11 @@ class BuiltInsValidator { const Instruction& referenced_inst, const Instruction& referenced_from_inst); + spv_result_t ValidateInstanceIdAtReference( + const Decoration& decoration, const Instruction& built_in_inst, + const Instruction& referenced_inst, + const Instruction& referenced_from_inst); + spv_result_t ValidateInstanceIndexAtReference( const Decoration& decoration, const Instruction& built_in_inst, const Instruction& referenced_inst, @@ -375,7 +382,7 @@ class BuiltInsValidator { // instruction. void Update(const Instruction& inst); - const ValidationState_t& _; + ValidationState_t& _; // Mapping id -> list of rules which validate instruction referencing the // id. Rules can create new rules and add them to this container. @@ -863,7 +870,8 @@ spv_result_t BuiltInsValidator::ValidateClipOrCullDistanceAtReference( } case SpvExecutionModelTessellationControl: case SpvExecutionModelTessellationEvaluation: - case SpvExecutionModelGeometry: { + case SpvExecutionModelGeometry: + case SpvExecutionModelMeshNV: { if (decoration.struct_member_index() != Decoration::kInvalidMember) { // The outer level of array is applied on the variable. if (spv_result_t error = ValidateF32Arr( @@ -1445,7 +1453,8 @@ spv_result_t BuiltInsValidator::ValidatePointSizeAtReference( } case SpvExecutionModelTessellationControl: case SpvExecutionModelTessellationEvaluation: - case SpvExecutionModelGeometry: { + case SpvExecutionModelGeometry: + case SpvExecutionModelMeshNV: { // PointSize can be a per-vertex variable for tessellation control, // tessellation evaluation and geometry shader stages. In such cases // variables will have an array of 32-bit floats. @@ -1556,10 +1565,12 @@ spv_result_t BuiltInsValidator::ValidatePositionAtReference( } case SpvExecutionModelGeometry: case SpvExecutionModelTessellationControl: - case SpvExecutionModelTessellationEvaluation: { + case SpvExecutionModelTessellationEvaluation: + case SpvExecutionModelMeshNV: { // Position can be a per-vertex variable for tessellation control, - // tessellation evaluation and geometry shader stages. In such cases - // variables will have an array of 4-component 32-bit float vectors. + // tessellation evaluation, geometry and mesh shader stages. In such + // cases variables will have an array of 4-component 32-bit float + // vectors. if (decoration.struct_member_index() != Decoration::kInvalidMember) { // The array is on the variable, so this must be a 4-component // 32-bit float vector. @@ -1682,7 +1693,14 @@ spv_result_t BuiltInsValidator::ValidatePrimitiveIdAtReference( case SpvExecutionModelFragment: case SpvExecutionModelTessellationControl: case SpvExecutionModelTessellationEvaluation: - case SpvExecutionModelGeometry: { + case SpvExecutionModelGeometry: + case SpvExecutionModelMeshNV: + case SpvExecutionModelRayGenerationNV: + case SpvExecutionModelIntersectionNV: + case SpvExecutionModelAnyHitNV: + case SpvExecutionModelClosestHitNV: + case SpvExecutionModelMissNV: + case SpvExecutionModelCallableNV: { // Ok. break; } @@ -2074,6 +2092,57 @@ spv_result_t BuiltInsValidator::ValidateVertexIndexAtDefinition( return ValidateVertexIndexAtReference(decoration, inst, inst, inst); } +spv_result_t BuiltInsValidator::ValidateVertexIdOrInstanceIdAtDefinition( + const Decoration& decoration, const Instruction& inst) { + const SpvBuiltIn label = SpvBuiltIn(decoration.params()[0]); + bool allow_instance_id = _.HasCapability(SpvCapabilityRayTracingNV) && + label == SpvBuiltInInstanceId; + if (spvIsVulkanEnv(_.context()->target_env) && !allow_instance_id) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << "Vulkan spec doesn't allow BuiltIn VertexId/InstanceId " + "to be used."; + } + + if (label == SpvBuiltInInstanceId) { + return ValidateInstanceIdAtReference(decoration, inst, inst, inst); + } + return SPV_SUCCESS; +} + +spv_result_t BuiltInsValidator::ValidateInstanceIdAtReference( + const Decoration& decoration, const Instruction& built_in_inst, + const Instruction& referenced_inst, + const Instruction& referenced_from_inst) { + if (spvIsVulkanEnv(_.context()->target_env)) { + for (const SpvExecutionModel execution_model : execution_models_) { + switch (execution_model) { + case SpvExecutionModelIntersectionNV: + case SpvExecutionModelClosestHitNV: + case SpvExecutionModelAnyHitNV: + // Do nothing, valid stages + break; + default: + return _.diag(SPV_ERROR_INVALID_DATA, &referenced_from_inst) + << "Vulkan spec allows BuiltIn InstanceId to be used " + "only with IntersectionNV, ClosestHitNV and AnyHitNV " + "execution models. " + << GetReferenceDesc(decoration, built_in_inst, referenced_inst, + referenced_from_inst); + break; + } + } + } + + if (function_id_ == 0) { + // Propagate this rule to all dependant ids in the global scope. + id_to_at_reference_checks_[referenced_from_inst.id()].push_back(std::bind( + &BuiltInsValidator::ValidateInstanceIdAtReference, this, decoration, + built_in_inst, referenced_from_inst, std::placeholders::_1)); + } + + return SPV_SUCCESS; +} + spv_result_t BuiltInsValidator::ValidateVertexIndexAtReference( const Decoration& decoration, const Instruction& built_in_inst, const Instruction& referenced_inst, @@ -2187,7 +2256,8 @@ spv_result_t BuiltInsValidator::ValidateLayerOrViewportIndexAtReference( for (const SpvExecutionModel execution_model : execution_models_) { switch (execution_model) { case SpvExecutionModelGeometry: - case SpvExecutionModelFragment: { + case SpvExecutionModelFragment: + case SpvExecutionModelMeshNV: { // Ok. break; case SpvExecutionModelVertex: @@ -2270,7 +2340,9 @@ spv_result_t BuiltInsValidator::ValidateComputeShaderI32Vec3InputAtReference( } for (const SpvExecutionModel execution_model : execution_models_) { - if (execution_model != SpvExecutionModelGLCompute) { + if (execution_model != SpvExecutionModelGLCompute && + execution_model != SpvExecutionModelTaskNV && + execution_model != SpvExecutionModelMeshNV) { return _.diag(SPV_ERROR_INVALID_DATA, &referenced_from_inst) << "Vulkan spec allows BuiltIn " << _.grammar().lookupOperandName(SPV_OPERAND_TYPE_BUILT_IN, @@ -2427,7 +2499,9 @@ spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinition( return ValidateWorkgroupSizeAtDefinition(decoration, inst); } case SpvBuiltInVertexId: - case SpvBuiltInInstanceId: + case SpvBuiltInInstanceId: { + return ValidateVertexIdOrInstanceIdAtDefinition(decoration, inst); + } case SpvBuiltInLocalInvocationIndex: case SpvBuiltInWorkDim: case SpvBuiltInGlobalSize: @@ -2464,7 +2538,34 @@ spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinition( case SpvBuiltInPositionPerViewNV: case SpvBuiltInViewportMaskPerViewNV: case SpvBuiltInFullyCoveredEXT: - case SpvBuiltInMax: { + case SpvBuiltInMax: + case SpvBuiltInTaskCountNV: + case SpvBuiltInPrimitiveCountNV: + case SpvBuiltInPrimitiveIndicesNV: + case SpvBuiltInClipDistancePerViewNV: + case SpvBuiltInCullDistancePerViewNV: + case SpvBuiltInLayerPerViewNV: + case SpvBuiltInMeshViewCountNV: + case SpvBuiltInMeshViewIndicesNV: + case SpvBuiltInBaryCoordNV: + case SpvBuiltInBaryCoordNoPerspNV: + case SpvBuiltInFragmentSizeNV: // alias SpvBuiltInFragSizeEXT + case SpvBuiltInInvocationsPerPixelNV: // alias + // SpvBuiltInFragInvocationCountEXT + case SpvBuiltInLaunchIdNV: + case SpvBuiltInLaunchSizeNV: + case SpvBuiltInWorldRayOriginNV: + case SpvBuiltInWorldRayDirectionNV: + case SpvBuiltInObjectRayOriginNV: + case SpvBuiltInObjectRayDirectionNV: + case SpvBuiltInRayTminNV: + case SpvBuiltInRayTmaxNV: + case SpvBuiltInInstanceCustomIndexNV: + case SpvBuiltInObjectToWorldNV: + case SpvBuiltInWorldToObjectNV: + case SpvBuiltInHitTNV: + case SpvBuiltInHitKindNV: + case SpvBuiltInIncomingRayFlagsNV: { // No validation rules (for the moment). break; } @@ -2554,7 +2655,7 @@ spv_result_t BuiltInsValidator::Run() { } // namespace // Validates correctness of built-in variables. -spv_result_t ValidateBuiltIns(const ValidationState_t& _) { +spv_result_t ValidateBuiltIns(ValidationState_t& _) { if (!spvIsVulkanEnv(_.context()->target_env)) { // Early return. All currently implemented rules are based on Vulkan spec. // diff --git a/3rdparty/spirv-tools/source/val/validate_capability.cpp b/3rdparty/spirv-tools/source/val/validate_capability.cpp index 4724b9f79..ad6cb2654 100644 --- a/3rdparty/spirv-tools/source/val/validate_capability.cpp +++ b/3rdparty/spirv-tools/source/val/validate_capability.cpp @@ -83,6 +83,11 @@ bool IsSupportOptionalVulkan_1_0(uint32_t capability) { case SpvCapabilityStorageImageReadWithoutFormat: case SpvCapabilityStorageImageWriteWithoutFormat: case SpvCapabilityMultiViewport: + case SpvCapabilityInt64Atomics: + case SpvCapabilityTransformFeedback: + case SpvCapabilityGeometryStreams: + case SpvCapabilityFloat16: + case SpvCapabilityInt8: return true; } return false; @@ -217,6 +222,19 @@ bool IsEnabledByCapabilityOpenCL_2_0(ValidationState_t& _, return false; } +bool IsSupportGuaranteedWebGPU(uint32_t capability) { + switch (capability) { + case SpvCapabilityMatrix: + case SpvCapabilityShader: + case SpvCapabilitySampled1D: + case SpvCapabilityImage1D: + case SpvCapabilityDerivativeControl: + case SpvCapabilityImageQuery: + return true; + } + return false; +} + } // namespace // Validates that capability declarations use operands allowed in the current @@ -300,6 +318,14 @@ spv_result_t CapabilityPass(ValidationState_t& _, const Instruction* inst) { << " Profile specification" << " (or requires extension or capability)"; } + } else if (env == SPV_ENV_WEBGPU_0) { + if (!IsSupportGuaranteedWebGPU(capability) && + !IsEnabledByExtension(_, capability)) { + return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) + << "Capability " << capability_str() + << " is not allowed by WebGPU specification" + << " (or requires extension)"; + } } return SPV_SUCCESS; diff --git a/3rdparty/spirv-tools/source/val/validate_cfg.cpp b/3rdparty/spirv-tools/source/val/validate_cfg.cpp index 744641e97..8fe30a881 100644 --- a/3rdparty/spirv-tools/source/val/validate_cfg.cpp +++ b/3rdparty/spirv-tools/source/val/validate_cfg.cpp @@ -48,6 +48,20 @@ spv_result_t ValidatePhi(ValidationState_t& _, const Instruction* inst) { "basic blocks."; } + const Instruction* type_inst = _.FindDef(inst->type_id()); + assert(type_inst); + + const SpvOp type_opcode = type_inst->opcode(); + if (type_opcode == SpvOpTypePointer && + _.addressing_model() == SpvAddressingModelLogical) { + if (!_.features().variable_pointers && + !_.features().variable_pointers_storage_buffer) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Using pointers with OpPhi requires capability " + << "VariablePointers or VariablePointersStorageBuffer"; + } + } + // Create a uniqued vector of predecessor ids for comparison against // incoming values. OpBranchConditional %cond %label %label produces two // predecessors in the CFG. @@ -111,7 +125,8 @@ spv_result_t ValidateBranchConditional(ValidationState_t& _, // grab the condition operand and check that it is a bool const auto cond_id = inst->GetOperandAs(0); const auto cond_op = _.FindDef(cond_id); - if (!cond_op || !_.IsBoolScalarType(cond_op->type_id())) { + if (!cond_op || !cond_op->type_id() || + !_.IsBoolScalarType(cond_op->type_id())) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "Condition operand for " "OpBranchConditional must be " "of boolean type"; @@ -296,9 +311,9 @@ std::string ConstructErrorString(const Construct& construct, // |case_fall_through|. Returns SPV_ERROR_INVALID_CFG if the case construct // headed by |target_block| branches to multiple case constructs. spv_result_t FindCaseFallThrough( - const ValidationState_t& _, BasicBlock* target_block, - uint32_t* case_fall_through, const BasicBlock* merge, - const std::unordered_set& case_targets, Function* function) { + ValidationState_t& _, BasicBlock* target_block, uint32_t* case_fall_through, + const BasicBlock* merge, const std::unordered_set& case_targets, + Function* function) { std::vector stack; stack.push_back(target_block); std::unordered_set visited; @@ -336,7 +351,9 @@ spv_result_t FindCaseFallThrough( } if (*case_fall_through == 0u) { - *case_fall_through = block->id(); + if (target_block != block) { + *case_fall_through = block->id(); + } } else if (*case_fall_through != block->id()) { // Case construct has at most one branch to another case construct. return _.diag(SPV_ERROR_INVALID_CFG, target_block->label()) @@ -352,8 +369,7 @@ spv_result_t FindCaseFallThrough( return SPV_SUCCESS; } -spv_result_t StructuredSwitchChecks(const ValidationState_t& _, - Function* function, +spv_result_t StructuredSwitchChecks(ValidationState_t& _, Function* function, const Instruction* switch_inst, const BasicBlock* header, const BasicBlock* merge) { @@ -452,7 +468,7 @@ spv_result_t StructuredSwitchChecks(const ValidationState_t& _, } spv_result_t StructuredControlFlowChecks( - const ValidationState_t& _, Function* function, + ValidationState_t& _, Function* function, const std::vector>& back_edges) { /// Check all backedges target only loop headers and have exactly one /// back-edge branching to it diff --git a/3rdparty/spirv-tools/source/val/validate_composites.cpp b/3rdparty/spirv-tools/source/val/validate_composites.cpp index 6be60261e..ccc558773 100644 --- a/3rdparty/spirv-tools/source/val/validate_composites.cpp +++ b/3rdparty/spirv-tools/source/val/validate_composites.cpp @@ -18,6 +18,7 @@ #include "source/diagnostic.h" #include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" #include "source/val/validation_state.h" @@ -148,8 +149,8 @@ spv_result_t ValidateVectorExtractDynamic(ValidationState_t& _, << "Expected Vector component type to be equal to Result Type"; } - const uint32_t index_type = _.GetOperandTypeId(inst, 3); - if (!_.IsIntScalarType(index_type)) { + const auto index = _.FindDef(inst->GetOperandAs(3)); + if (!index || index->type_id() == 0 || !_.IsIntScalarType(index->type_id())) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected Index to be int scalar"; } @@ -464,10 +465,12 @@ spv_result_t ValidateVectorShuffle(ValidationState_t& _, } // All Component literals must either be FFFFFFFF or in [0, N - 1]. + // For WebGPU specifically, Component literals cannot be FFFFFFFF. auto vector1ComponentCount = vector1Type->GetOperandAs(2); auto vector2ComponentCount = vector2Type->GetOperandAs(2); auto N = vector1ComponentCount + vector2ComponentCount; auto firstLiteralIndex = 4; + const auto is_webgpu_env = spvIsWebGPUEnv(_.context()->target_env); for (size_t i = firstLiteralIndex; i < inst->operands().size(); ++i) { auto literal = inst->GetOperandAs(i); if (literal != 0xFFFFFFFF && literal >= N) { @@ -475,6 +478,12 @@ spv_result_t ValidateVectorShuffle(ValidationState_t& _, << "Component index " << literal << " is out of bounds for " << "combined (Vector1 + Vector2) size of " << N << "."; } + + if (is_webgpu_env && literal == 0xFFFFFFFF) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Component literal at operand " << i - firstLiteralIndex + << " cannot be 0xFFFFFFFF in WebGPU execution environment."; + } } return SPV_SUCCESS; diff --git a/3rdparty/spirv-tools/source/val/validate_constants.cpp b/3rdparty/spirv-tools/source/val/validate_constants.cpp index 5dbe6c6df..eab25ec1c 100644 --- a/3rdparty/spirv-tools/source/val/validate_constants.cpp +++ b/3rdparty/spirv-tools/source/val/validate_constants.cpp @@ -174,8 +174,7 @@ spv_result_t ValidateConstantComposite(ValidationState_t& _, bool is_const; uint32_t value; std::tie(is_int32, is_const, value) = _.EvalInt32IfConst(length->id()); - if (is_int32 && is_const && !spvOpcodeIsSpecConstant(length->opcode()) && - value != constituent_count) { + if (is_int32 && is_const && value != constituent_count) { return _.diag(SPV_ERROR_INVALID_ID, inst) << opcode_name << " Constituent count does not match " @@ -315,6 +314,57 @@ spv_result_t ValidateConstantNull(ValidationState_t& _, return SPV_SUCCESS; } +spv_result_t ValidateSpecConstantOp(ValidationState_t& _, + const Instruction* inst) { + const auto op = inst->GetOperandAs(2); + + // The binary parser already ensures that the op is valid for *some* + // environment. Here we check restrictions. + switch(op) { + case SpvOpQuantizeToF16: + if (!_.HasCapability(SpvCapabilityShader)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Specialization constant operation " << spvOpcodeString(op) + << " requires Shader capability"; + } + break; + + case SpvOpConvertFToS: + case SpvOpConvertSToF: + case SpvOpConvertFToU: + case SpvOpConvertUToF: + case SpvOpUConvert: + case SpvOpConvertPtrToU: + case SpvOpConvertUToPtr: + case SpvOpGenericCastToPtr: + case SpvOpPtrCastToGeneric: + case SpvOpBitcast: + case SpvOpFNegate: + case SpvOpFAdd: + case SpvOpFSub: + case SpvOpFMul: + case SpvOpFDiv: + case SpvOpFRem: + case SpvOpFMod: + case SpvOpAccessChain: + case SpvOpInBoundsAccessChain: + case SpvOpPtrAccessChain: + case SpvOpInBoundsPtrAccessChain: + if (!_.HasCapability(SpvCapabilityKernel)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Specialization constant operation " << spvOpcodeString(op) + << " requires Kernel capability"; + } + break; + + default: + break; + } + + // TODO(dneto): Validate result type and arguments to the various operations. + return SPV_SUCCESS; +} + } // namespace spv_result_t ConstantPass(ValidationState_t& _, const Instruction* inst) { @@ -335,6 +385,9 @@ spv_result_t ConstantPass(ValidationState_t& _, const Instruction* inst) { case SpvOpConstantNull: if (auto error = ValidateConstantNull(_, inst)) return error; break; + case SpvOpSpecConstantOp: + if (auto error = ValidateSpecConstantOp(_, inst)) return error; + break; default: break; } diff --git a/3rdparty/spirv-tools/source/val/validate_conversion.cpp b/3rdparty/spirv-tools/source/val/validate_conversion.cpp index 9c6f68c6f..b51eec9a4 100644 --- a/3rdparty/spirv-tools/source/val/validate_conversion.cpp +++ b/3rdparty/spirv-tools/source/val/validate_conversion.cpp @@ -49,6 +49,11 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { << "Expected input to have the same dimension as Result Type: " << spvOpcodeString(opcode); + if (!_.features().use_int8_type && (8 == _.GetBitWidth(result_type))) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Invalid cast to 8-bit integer from a floating-point: " + << spvOpcodeString(opcode); + break; } @@ -70,6 +75,11 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { << "Expected input to have the same dimension as Result Type: " << spvOpcodeString(opcode); + if (!_.features().use_int8_type && (8 == _.GetBitWidth(result_type))) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Invalid cast to 8-bit integer from a floating-point: " + << spvOpcodeString(opcode); + break; } @@ -93,6 +103,11 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { << "Expected input to have the same dimension as Result Type: " << spvOpcodeString(opcode); + if (!_.features().use_int8_type && (8 == _.GetBitWidth(input_type))) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Invalid cast to floating-point from an 8-bit integer: " + << spvOpcodeString(opcode); + break; } @@ -233,7 +248,7 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { << spvOpcodeString(opcode); const uint32_t input_type = _.GetOperandTypeId(inst, 2); - if (!_.IsIntScalarType(input_type)) + if (!input_type || !_.IsIntScalarType(input_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar as input: " << spvOpcodeString(opcode); break; diff --git a/3rdparty/spirv-tools/source/val/validate_debug.cpp b/3rdparty/spirv-tools/source/val/validate_debug.cpp index d84ed3801..b49890f26 100644 --- a/3rdparty/spirv-tools/source/val/validate_debug.cpp +++ b/3rdparty/spirv-tools/source/val/validate_debug.cpp @@ -14,6 +14,8 @@ #include "source/val/validate.h" +#include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" #include "source/val/validation_state.h" @@ -54,6 +56,13 @@ spv_result_t ValidateLine(ValidationState_t& _, const Instruction* inst) { } // namespace spv_result_t DebugPass(ValidationState_t& _, const Instruction* inst) { + if (spvIsWebGPUEnv(_.context()->target_env) && + spvOpcodeIsDebug(inst->opcode())) { + return _.diag(SPV_ERROR_INVALID_BINARY, inst) + << "Debugging instructions are not allowed in the WebGPU execution " + << "environment."; + } + switch (inst->opcode()) { case SpvOpMemberName: if (auto error = ValidateMemberName(_, inst)) return error; diff --git a/3rdparty/spirv-tools/source/val/validate_decorations.cpp b/3rdparty/spirv-tools/source/val/validate_decorations.cpp index ed312f73f..582d11cc7 100644 --- a/3rdparty/spirv-tools/source/val/validate_decorations.cpp +++ b/3rdparty/spirv-tools/source/val/validate_decorations.cpp @@ -17,7 +17,9 @@ #include #include #include +#include #include +#include #include #include @@ -44,6 +46,13 @@ struct PairHash { } }; +// A functor for hashing decoration types. +struct SpvDecorationHash { + std::size_t operator()(SpvDecoration dec) const { + return static_cast(dec); + } +}; + // Struct member layout attributes that are inherited through arrays. struct LayoutConstraints { explicit LayoutConstraints( @@ -156,7 +165,8 @@ uint32_t getBaseAlignment(uint32_t member_id, bool roundUp, ValidationState_t& vstate) { const auto inst = vstate.FindDef(member_id); const auto& words = inst->words(); - uint32_t baseAlignment = 0; + // Minimal alignment is byte-aligned. + uint32_t baseAlignment = 1; switch (inst->opcode()) { case SpvOpTypeInt: case SpvOpTypeFloat: @@ -216,23 +226,57 @@ uint32_t getBaseAlignment(uint32_t member_id, bool roundUp, return baseAlignment; } +// Returns scalar alignment of a type. +uint32_t getScalarAlignment(uint32_t type_id, ValidationState_t& vstate) { + const auto inst = vstate.FindDef(type_id); + const auto& words = inst->words(); + switch (inst->opcode()) { + case SpvOpTypeInt: + case SpvOpTypeFloat: + return words[2] / 8; + case SpvOpTypeVector: + case SpvOpTypeMatrix: + case SpvOpTypeArray: + case SpvOpTypeRuntimeArray: { + const auto compositeMemberTypeId = words[2]; + return getScalarAlignment(compositeMemberTypeId, vstate); + } + case SpvOpTypeStruct: { + const auto members = getStructMembers(type_id, vstate); + uint32_t max_member_alignment = 1; + for (uint32_t memberIdx = 0, numMembers = uint32_t(members.size()); + memberIdx < numMembers; ++memberIdx) { + const auto id = members[memberIdx]; + uint32_t member_alignment = getScalarAlignment(id, vstate); + if (member_alignment > max_member_alignment) { + max_member_alignment = member_alignment; + } + } + return max_member_alignment; + } break; + default: + assert(0); + break; + } + + return 1; +} + // Returns size of a struct member. Doesn't include padding at the end of struct // or array. Assumes that in the struct case, all members have offsets. -uint32_t getSize(uint32_t member_id, bool roundUp, - const LayoutConstraints& inherited, +uint32_t getSize(uint32_t member_id, const LayoutConstraints& inherited, MemberConstraints& constraints, ValidationState_t& vstate) { const auto inst = vstate.FindDef(member_id); const auto& words = inst->words(); switch (inst->opcode()) { case SpvOpTypeInt: case SpvOpTypeFloat: - return getBaseAlignment(member_id, roundUp, inherited, constraints, - vstate); + return words[2] / 8; case SpvOpTypeVector: { const auto componentId = words[2]; const auto numComponents = words[3]; const auto componentSize = - getSize(componentId, roundUp, inherited, constraints, vstate); + getSize(componentId, inherited, constraints, vstate); const auto size = componentSize * numComponents; return size; } @@ -243,7 +287,7 @@ uint32_t getSize(uint32_t member_id, bool roundUp, const uint32_t num_elem = sizeInst->words()[3]; const uint32_t elem_type = words[2]; const uint32_t elem_size = - getSize(elem_type, roundUp, inherited, constraints, vstate); + getSize(elem_type, inherited, constraints, vstate); // Account for gaps due to alignments in the first N-1 elements, // then add the size of the last element. const auto size = @@ -263,7 +307,7 @@ uint32_t getSize(uint32_t member_id, bool roundUp, const auto num_rows = component_inst->words()[3]; const auto scalar_elem_type = component_inst->words()[2]; const uint32_t scalar_elem_size = - getSize(scalar_elem_type, roundUp, inherited, constraints, vstate); + getSize(scalar_elem_type, inherited, constraints, vstate); return (num_rows - 1) * inherited.matrix_stride + num_columns * scalar_elem_size; } @@ -285,8 +329,7 @@ uint32_t getSize(uint32_t member_id, bool roundUp, // has been checked earlier in the flow. assert(offset != 0xffffffff); const auto& constraint = constraints[std::make_pair(lastMember, lastIdx)]; - return offset + - getSize(lastMember, roundUp, constraint, constraints, vstate); + return offset + getSize(lastMember, constraint, constraints, vstate); } default: assert(0); @@ -305,7 +348,7 @@ bool hasImproperStraddle(uint32_t id, uint32_t offset, const LayoutConstraints& inherited, MemberConstraints& constraints, ValidationState_t& vstate) { - const auto size = getSize(id, false, inherited, constraints, vstate); + const auto size = getSize(id, inherited, constraints, vstate); const auto F = offset; const auto L = offset + size - 1; if (size <= 16) { @@ -333,19 +376,28 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, ValidationState_t& vstate) { if (vstate.options()->skip_block_layout) return SPV_SUCCESS; + // Relaxed layout and scalar layout can both be in effect at the same time. + // For example, relaxed layout is implied by Vulkan 1.1. But scalar layout + // is more permissive than relaxed layout. + const bool relaxed_block_layout = vstate.IsRelaxedBlockLayout(); + const bool scalar_block_layout = vstate.options()->scalar_block_layout; + auto fail = [&vstate, struct_id, storage_class_str, decoration_str, - blockRules](uint32_t member_idx) -> DiagnosticStream { + blockRules, relaxed_block_layout, + scalar_block_layout](uint32_t member_idx) -> DiagnosticStream { DiagnosticStream ds = std::move(vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(struct_id)) << "Structure id " << struct_id << " decorated as " << decoration_str << " for variable in " << storage_class_str - << " storage class must follow standard " + << " storage class must follow " + << (scalar_block_layout + ? "scalar " + : (relaxed_block_layout ? "relaxed " : "standard ")) << (blockRules ? "uniform buffer" : "storage buffer") << " layout rules: member " << member_idx << " "); return ds; }; - const bool relaxed_block_layout = vstate.IsRelaxedBlockLayout(); const auto& members = getStructMembers(struct_id, vstate); // To check for member overlaps, we want to traverse the members in @@ -388,20 +440,25 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, auto id = members[member_offset.member]; const LayoutConstraints& constraint = constraints[std::make_pair(struct_id, uint32_t(memberIdx))]; + // Scalar layout takes precedence because it's more permissive, and implying + // an alignment that divides evenly into the alignment that would otherwise + // be used. const auto alignment = - getBaseAlignment(id, blockRules, constraint, constraints, vstate); + scalar_block_layout + ? getScalarAlignment(id, vstate) + : getBaseAlignment(id, blockRules, constraint, constraints, vstate); const auto inst = vstate.FindDef(id); const auto opcode = inst->opcode(); - const auto size = getSize(id, blockRules, constraint, constraints, vstate); + const auto size = getSize(id, constraint, constraints, vstate); // Check offset. if (offset == 0xffffffff) return fail(memberIdx) << "is missing an Offset decoration"; - if (relaxed_block_layout && opcode == SpvOpTypeVector) { + if (!scalar_block_layout && relaxed_block_layout && + opcode == SpvOpTypeVector) { // In relaxed block layout, the vector offset must be aligned to the // vector's scalar element type. const auto componentId = inst->words()[2]; - const auto scalar_alignment = getBaseAlignment( - componentId, blockRules, constraint, constraints, vstate); + const auto scalar_alignment = getScalarAlignment(componentId, vstate); if (!IsAlignedTo(offset, scalar_alignment)) { return fail(memberIdx) << "at offset " << offset @@ -409,7 +466,7 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, } } else { // Without relaxed block layout, the offset must be divisible by the - // base alignment. + // alignment requirement. if (!IsAlignedTo(offset, alignment)) { return fail(memberIdx) << "at offset " << offset << " is not aligned to " << alignment; @@ -419,7 +476,7 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, return fail(memberIdx) << "at offset " << offset << " overlaps previous member ending at offset " << nextValidOffset - 1; - if (relaxed_block_layout) { + if (!scalar_block_layout && relaxed_block_layout) { // Check improper straddle of vectors. if (SpvOpTypeVector == opcode && hasImproperStraddle(id, offset, constraint, constraints, vstate)) @@ -443,8 +500,8 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, << " not satisfying alignment to " << alignment; } } - // Check arrays. - if (SpvOpTypeArray == opcode) { + // Check arrays and runtime arrays. + if (SpvOpTypeArray == opcode || SpvOpTypeRuntimeArray == opcode) { const auto typeId = inst->word(2); const auto arrayInst = vstate.FindDef(typeId); if (SpvOpTypeStruct == arrayInst->opcode() && @@ -462,7 +519,8 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, } } nextValidOffset = offset + size; - if (blockRules && (SpvOpTypeArray == opcode || SpvOpTypeStruct == opcode)) { + if (!scalar_block_layout && blockRules && + (SpvOpTypeArray == opcode || SpvOpTypeStruct == opcode)) { // Uniform block rules don't permit anything in the padding of a struct // or array. nextValidOffset = align(nextValidOffset, alignment); @@ -471,15 +529,18 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, return SPV_SUCCESS; } -// Returns true if structure id has given decoration. Handles also nested -// structures. -bool hasDecoration(uint32_t struct_id, SpvDecoration decoration, +// Returns true if variable or structure id has given decoration. Handles also +// nested structures. +bool hasDecoration(uint32_t id, SpvDecoration decoration, ValidationState_t& vstate) { - for (auto& dec : vstate.id_decorations(struct_id)) { + for (auto& dec : vstate.id_decorations(id)) { if (decoration == dec.dec_type()) return true; } - for (auto id : getStructMembers(struct_id, SpvOpTypeStruct, vstate)) { - if (hasDecoration(id, decoration, vstate)) { + if (SpvOpTypeStruct != vstate.FindDef(id)->opcode()) { + return false; + } + for (auto member_id : getStructMembers(id, SpvOpTypeStruct, vstate)) { + if (hasDecoration(member_id, decoration, vstate)) { return true; } } @@ -647,42 +708,6 @@ spv_result_t CheckDecorationsOfEntryPoints(ValidationState_t& vstate) { return SPV_SUCCESS; } -spv_result_t CheckDescriptorSetArrayOfArrays(ValidationState_t& vstate) { - for (const auto& inst : vstate.ordered_instructions()) { - if (SpvOpVariable != inst.opcode()) continue; - - // Verify this variable is a DescriptorSet - bool has_descriptor_set = false; - for (const auto& decoration : vstate.id_decorations(inst.id())) { - if (SpvDecorationDescriptorSet == decoration.dec_type()) { - has_descriptor_set = true; - break; - } - } - if (!has_descriptor_set) continue; - - const auto* ptrInst = vstate.FindDef(inst.word(1)); - assert(SpvOpTypePointer == ptrInst->opcode()); - - // Check for a first level array - const auto typePtr = vstate.FindDef(ptrInst->word(3)); - if (SpvOpTypeRuntimeArray != typePtr->opcode() && - SpvOpTypeArray != typePtr->opcode()) { - continue; - } - - // Check for a second level array - const auto secondaryTypePtr = vstate.FindDef(typePtr->word(2)); - if (SpvOpTypeRuntimeArray == secondaryTypePtr->opcode() || - SpvOpTypeArray == secondaryTypePtr->opcode()) { - return vstate.diag(SPV_ERROR_INVALID_ID, &inst) - << "Only a single level of array is allowed for descriptor " - "set variables"; - } - } - return SPV_SUCCESS; -} - // Load |constraints| with all the member constraints for structs contained // within the given array type. void ComputeMemberConstraintsForArray(MemberConstraints* constraints, @@ -765,15 +790,63 @@ void ComputeMemberConstraintsForArray(MemberConstraints* constraints, } spv_result_t CheckDecorationsOfBuffers(ValidationState_t& vstate) { + // Set of entry points that are known to use a push constant. + std::unordered_set uses_push_constant; for (const auto& inst : vstate.ordered_instructions()) { const auto& words = inst.words(); if (SpvOpVariable == inst.opcode()) { + const auto var_id = inst.id(); // For storage class / decoration combinations, see Vulkan 14.5.4 "Offset // and Stride Assignment". const auto storageClass = words[3]; const bool uniform = storageClass == SpvStorageClassUniform; + const bool uniform_constant = + storageClass == SpvStorageClassUniformConstant; const bool push_constant = storageClass == SpvStorageClassPushConstant; const bool storage_buffer = storageClass == SpvStorageClassStorageBuffer; + + if (spvIsVulkanEnv(vstate.context()->target_env)) { + // Vulkan 14.5.1: There must be no more than one PushConstant block + // per entry point. + if (push_constant) { + auto entry_points = vstate.EntryPointReferences(var_id); + for (auto ep_id : entry_points) { + const bool already_used = !uses_push_constant.insert(ep_id).second; + if (already_used) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(var_id)) + << "Entry point id '" << ep_id + << "' uses more than one PushConstant interface.\n" + << "From Vulkan spec, section 14.5.1:\n" + << "There must be no more than one push constant block " + << "statically used per shader entry point."; + } + } + } + // Vulkan 14.5.2: Check DescriptorSet and Binding decoration for + // UniformConstant which cannot be a struct. + if (uniform_constant) { + auto entry_points = vstate.EntryPointReferences(var_id); + if (!entry_points.empty() && + !hasDecoration(var_id, SpvDecorationDescriptorSet, vstate)) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(var_id)) + << "UniformConstant id '" << var_id + << "' is missing DescriptorSet decoration.\n" + << "From Vulkan spec, section 14.5.2:\n" + << "These variables must have DescriptorSet and Binding " + "decorations specified"; + } + if (!entry_points.empty() && + !hasDecoration(var_id, SpvDecorationBinding, vstate)) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(var_id)) + << "UniformConstant id '" << var_id + << "' is missing Binding decoration.\n" + << "From Vulkan spec, section 14.5.2:\n" + << "These variables must have DescriptorSet and Binding " + "decorations specified"; + } + } + } + if (uniform || push_constant || storage_buffer) { const auto ptrInst = vstate.FindDef(words[1]); assert(SpvOpTypePointer == ptrInst->opcode()); @@ -786,6 +859,42 @@ spv_result_t CheckDecorationsOfBuffers(ValidationState_t& vstate) { const char* sc_str = uniform ? "Uniform" : (push_constant ? "PushConstant" : "StorageBuffer"); + + if (spvIsVulkanEnv(vstate.context()->target_env)) { + // Vulkan 14.5.1: Check Block decoration for PushConstant variables. + if (push_constant && !hasDecoration(id, SpvDecorationBlock, vstate)) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) + << "PushConstant id '" << id + << "' is missing Block decoration.\n" + << "From Vulkan spec, section 14.5.1:\n" + << "Such variables must be identified with a Block " + "decoration"; + } + // Vulkan 14.5.2: Check DescriptorSet and Binding decoration for + // Uniform and StorageBuffer variables. + if (uniform || storage_buffer) { + auto entry_points = vstate.EntryPointReferences(var_id); + if (!entry_points.empty() && + !hasDecoration(var_id, SpvDecorationDescriptorSet, vstate)) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(var_id)) + << sc_str << " id '" << var_id + << "' is missing DescriptorSet decoration.\n" + << "From Vulkan spec, section 14.5.2:\n" + << "These variables must have DescriptorSet and Binding " + "decorations specified"; + } + if (!entry_points.empty() && + !hasDecoration(var_id, SpvDecorationBinding, vstate)) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(var_id)) + << sc_str << " id '" << var_id + << "' is missing Binding decoration.\n" + << "From Vulkan spec, section 14.5.2:\n" + << "These variables must have DescriptorSet and Binding " + "decorations specified"; + } + } + } + for (const auto& dec : vstate.id_decorations(id)) { const bool blockDeco = SpvDecorationBlock == dec.dec_type(); const bool bufferDeco = SpvDecorationBufferBlock == dec.dec_type(); @@ -799,7 +908,8 @@ spv_result_t CheckDecorationsOfBuffers(ValidationState_t& vstate) { if (isMissingOffsetInStruct(id, vstate)) { return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) << "Structure id " << id << " decorated as " << deco_str - << " must be explicitly laid out with Offset decorations."; + << " must be explicitly laid out with Offset " + "decorations."; } else if (hasDecoration(id, SpvDecorationGLSLShared, vstate)) { return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) << "Structure id " << id << " decorated as " << deco_str @@ -840,15 +950,281 @@ spv_result_t CheckDecorationsOfBuffers(ValidationState_t& vstate) { return SPV_SUCCESS; } +spv_result_t CheckDecorationsCompatibility(ValidationState_t& vstate) { + using AtMostOnceSet = std::unordered_set; + using MutuallyExclusiveSets = + std::vector>; + using PerIDKey = std::tuple; + using PerMemberKey = std::tuple; + using DecorationNameTable = + std::unordered_map; + + static const auto* const at_most_once_per_id = new AtMostOnceSet{ + SpvDecorationArrayStride, + }; + static const auto* const at_most_once_per_member = new AtMostOnceSet{ + SpvDecorationOffset, + SpvDecorationMatrixStride, + SpvDecorationRowMajor, + SpvDecorationColMajor, + }; + static const auto* const mutually_exclusive_per_id = + new MutuallyExclusiveSets{ + {SpvDecorationBlock, SpvDecorationBufferBlock}, + }; + static const auto* const mutually_exclusive_per_member = + new MutuallyExclusiveSets{ + {SpvDecorationRowMajor, SpvDecorationColMajor}, + }; + // For printing the decoration name. + static const auto* const decoration_name = new DecorationNameTable{ + {SpvDecorationArrayStride, "ArrayStride"}, + {SpvDecorationOffset, "Offset"}, + {SpvDecorationMatrixStride, "MatrixStride"}, + {SpvDecorationRowMajor, "RowMajor"}, + {SpvDecorationColMajor, "ColMajor"}, + {SpvDecorationBlock, "Block"}, + {SpvDecorationBufferBlock, "BufferBlock"}, + }; + + std::set seen_per_id; + std::set seen_per_member; + + for (const auto& inst : vstate.ordered_instructions()) { + const auto& words = inst.words(); + if (SpvOpDecorate == inst.opcode()) { + const auto id = words[1]; + const auto dec_type = static_cast(words[2]); + const auto k = PerIDKey(dec_type, id); + const auto already_used = !seen_per_id.insert(k).second; + if (already_used && + at_most_once_per_id->find(dec_type) != at_most_once_per_id->end()) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) + << "ID '" << id << "' decorated with " + << decoration_name->at(dec_type) + << " multiple times is not allowed."; + } + // Verify certain mutually exclusive decorations are not both applied on + // an ID. + for (const auto& s : *mutually_exclusive_per_id) { + if (s.find(dec_type) == s.end()) continue; + for (auto excl_dec_type : s) { + if (excl_dec_type == dec_type) continue; + const auto excl_k = PerIDKey(excl_dec_type, id); + if (seen_per_id.find(excl_k) != seen_per_id.end()) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) + << "ID '" << id << "' decorated with both " + << decoration_name->at(dec_type) << " and " + << decoration_name->at(excl_dec_type) << " is not allowed."; + } + } + } + } else if (SpvOpMemberDecorate == inst.opcode()) { + const auto id = words[1]; + const auto member_id = words[2]; + const auto dec_type = static_cast(words[3]); + const auto k = PerMemberKey(dec_type, id, member_id); + const auto already_used = !seen_per_member.insert(k).second; + if (already_used && at_most_once_per_member->find(dec_type) != + at_most_once_per_member->end()) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) + << "ID '" << id << "', member '" << member_id + << "' decorated with " << decoration_name->at(dec_type) + << " multiple times is not allowed."; + } + // Verify certain mutually exclusive decorations are not both applied on + // a (ID, member) tuple. + for (const auto& s : *mutually_exclusive_per_member) { + if (s.find(dec_type) == s.end()) continue; + for (auto excl_dec_type : s) { + if (excl_dec_type == dec_type) continue; + const auto excl_k = PerMemberKey(excl_dec_type, id, member_id); + if (seen_per_member.find(excl_k) != seen_per_member.end()) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(id)) + << "ID '" << id << "', member '" << member_id + << "' decorated with both " << decoration_name->at(dec_type) + << " and " << decoration_name->at(excl_dec_type) + << " is not allowed."; + } + } + } + } + } + return SPV_SUCCESS; +} + +spv_result_t CheckVulkanMemoryModelDeprecatedDecorations( + ValidationState_t& vstate) { + if (vstate.memory_model() != SpvMemoryModelVulkanKHR) return SPV_SUCCESS; + + std::string msg; + std::ostringstream str(msg); + for (const auto& def : vstate.all_definitions()) { + const auto inst = def.second; + const auto id = inst->id(); + for (const auto& dec : vstate.id_decorations(id)) { + const auto member = dec.struct_member_index(); + if (dec.dec_type() == SpvDecorationCoherent || + dec.dec_type() == SpvDecorationVolatile) { + str << (dec.dec_type() == SpvDecorationCoherent ? "Coherent" + : "Volatile"); + str << " decoration targeting " << vstate.getIdName(id); + if (member != Decoration::kInvalidMember) { + str << " (member index " << member << ")"; + } + str << " is banned when using the Vulkan memory model."; + return vstate.diag(SPV_ERROR_INVALID_ID, inst) << str.str(); + } + } + } + return SPV_SUCCESS; +} + +// Returns SPV_SUCCESS if validation rules are satisfied for FPRoundingMode +// decorations. Otherwise emits a diagnostic and returns something other than +// SPV_SUCCESS. +spv_result_t CheckFPRoundingModeForShaders(ValidationState_t& vstate, + const Instruction& inst) { + // Validates width-only conversion instruction for floating-point object + // i.e., OpFConvert + if (inst.opcode() != SpvOpFConvert) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "FPRoundingMode decoration can be applied only to a " + "width-only conversion instruction for floating-point " + "object."; + } + + // Validates Object operand of an OpStore + for (const auto& use : inst.uses()) { + const auto store = use.first; + if (store->opcode() != SpvOpStore) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore."; + } + + if (use.second != 2) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore."; + } + + const auto ptr_inst = vstate.FindDef(store->GetOperandAs(0)); + const auto ptr_type = vstate.FindDef(ptr_inst->GetOperandAs(0)); + + const auto half_float_id = ptr_type->GetOperandAs(2); + if (!vstate.IsFloatScalarOrVectorType(half_float_id) || + vstate.GetBitWidth(half_float_id) != 16) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore storing through a pointer " + "to " + "a 16-bit floating-point scalar or vector object."; + } + + // Validates storage class of the pointer to the OpStore + const auto storage = ptr_type->GetOperandAs(1); + if (storage != SpvStorageClassStorageBuffer && + storage != SpvStorageClassUniform && + storage != SpvStorageClassPushConstant && + storage != SpvStorageClassInput && storage != SpvStorageClassOutput) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore in the StorageBuffer, " + "Uniform, PushConstant, Input, or Output Storage " + "Classes."; + } + } + return SPV_SUCCESS; +} + +// Returns SPV_SUCCESS if validation rules are satisfied for Uniform +// decorations. Otherwise emits a diagnostic and returns something other than +// SPV_SUCCESS. Assumes each decoration on a group has been propagated down to +// the group members. +spv_result_t CheckUniformDecoration(ValidationState_t& vstate, + const Instruction& inst, + const Decoration&) { + // Uniform must decorate an "object" + // - has a result ID + // - is an instantiation of a non-void type. So it has a type ID, and that + // type is not void. + + // We already know the result ID is non-zero. + + if (inst.type_id() == 0) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "Uniform decoration applied to a non-object"; + } + if (Instruction* type_inst = vstate.FindDef(inst.type_id())) { + if (type_inst->opcode() == SpvOpTypeVoid) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "Uniform decoration applied to a value with void type"; + } + } else { + // We might never get here because this would have been rejected earlier in + // the flow. + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << "Uniform decoration applied to an object with invalid type"; + } + return SPV_SUCCESS; +} + +#define PASS_OR_BAIL_AT_LINE(X, LINE) \ + { \ + spv_result_t e##LINE = (X); \ + if (e##LINE != SPV_SUCCESS) return e##LINE; \ + } +#define PASS_OR_BAIL(X) PASS_OR_BAIL_AT_LINE(X, __LINE__) + +// Check rules for decorations where we start from the decoration rather +// than the decorated object. Assumes each decoration on a group have been +// propagated down to the group members. +spv_result_t CheckDecorationsFromDecoration(ValidationState_t& vstate) { + // Some rules are only checked for shaders. + const bool is_shader = vstate.HasCapability(SpvCapabilityShader); + + for (const auto& kv : vstate.id_decorations()) { + const uint32_t id = kv.first; + const auto& decorations = kv.second; + if (decorations.empty()) continue; + + const Instruction* inst = vstate.FindDef(id); + assert(inst); + + // We assume the decorations applied to a decoration group have already + // been propagated down to the group members. + if (inst->opcode() == SpvOpDecorationGroup) continue; + + // Validates FPRoundingMode decoration + for (const auto& decoration : decorations) { + switch (decoration.dec_type()) { + case SpvDecorationFPRoundingMode: + if (is_shader) + PASS_OR_BAIL(CheckFPRoundingModeForShaders(vstate, *inst)); + break; + case SpvDecorationUniform: + PASS_OR_BAIL(CheckUniformDecoration(vstate, *inst, decoration)); + break; + default: + break; + } + } + } + return SPV_SUCCESS; +} + } // namespace -// Validates that decorations have been applied properly. spv_result_t ValidateDecorations(ValidationState_t& vstate) { if (auto error = CheckImportedVariableInitialization(vstate)) return error; if (auto error = CheckDecorationsOfEntryPoints(vstate)) return error; if (auto error = CheckDecorationsOfBuffers(vstate)) return error; + if (auto error = CheckDecorationsCompatibility(vstate)) return error; if (auto error = CheckLinkageAttrOfFunctions(vstate)) return error; - if (auto error = CheckDescriptorSetArrayOfArrays(vstate)) return error; + if (auto error = CheckVulkanMemoryModelDeprecatedDecorations(vstate)) + return error; + if (auto error = CheckDecorationsFromDecoration(vstate)) return error; return SPV_SUCCESS; } diff --git a/3rdparty/spirv-tools/source/val/validate_derivatives.cpp b/3rdparty/spirv-tools/source/val/validate_derivatives.cpp index 0e0dbbe3d..718970769 100644 --- a/3rdparty/spirv-tools/source/val/validate_derivatives.cpp +++ b/3rdparty/spirv-tools/source/val/validate_derivatives.cpp @@ -54,12 +54,36 @@ spv_result_t DerivativesPass(ValidationState_t& _, const Instruction* inst) { << spvOpcodeString(opcode); } - _.function(inst->function()->id()) - ->RegisterExecutionModelLimitation( - SpvExecutionModelFragment, - std::string("Derivative instructions require Fragment execution " + const spvtools::Extension compute_shader_derivatives_extension = + kSPV_NV_compute_shader_derivatives; + ExtensionSet exts(1, &compute_shader_derivatives_extension); + + if (_.HasAnyOfExtensions(exts)) { + _.function(inst->function()->id()) + ->RegisterExecutionModelLimitation([opcode](SpvExecutionModel model, + std::string* message) { + if (model != SpvExecutionModelFragment && + model != SpvExecutionModelGLCompute) { + if (message) { + *message = + std::string( + "Derivative instructions require Fragment execution " "model: ") + - spvOpcodeString(opcode)); + spvOpcodeString(opcode); + } + return false; + } + return true; + }); + } else { + _.function(inst->function()->id()) + ->RegisterExecutionModelLimitation( + SpvExecutionModelFragment, + std::string( + "Derivative instructions require Fragment execution " + "model: ") + + spvOpcodeString(opcode)); + } break; } diff --git a/3rdparty/spirv-tools/source/val/validate_ext_inst.cpp b/3rdparty/spirv-tools/source/val/validate_extensions.cpp similarity index 97% rename from 3rdparty/spirv-tools/source/val/validate_ext_inst.cpp rename to 3rdparty/spirv-tools/source/val/validate_extensions.cpp index eb3427090..f264c8e76 100644 --- a/3rdparty/spirv-tools/source/val/validate_ext_inst.cpp +++ b/3rdparty/spirv-tools/source/val/validate_extensions.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Google Inc. +// Copyright (c) 2018 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Validates correctness of ExtInst SPIR-V instructions. +// Validates correctness of extension SPIR-V instructions. #include "source/val/validate.h" @@ -21,9 +21,12 @@ #include #include "source/diagnostic.h" +#include "source/enum_string_mapping.h" +#include "source/extensions.h" #include "source/latest_version_glsl_std_450_header.h" #include "source/latest_version_opencl_std_header.h" #include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" #include "source/val/validation_state.h" @@ -41,14 +44,41 @@ uint32_t GetSizeTBitWidth(const ValidationState_t& _) { } // anonymous namespace -// Validates correctness of ExtInst instructions. -spv_result_t ExtInstPass(ValidationState_t& _, const Instruction* inst) { - const SpvOp opcode = inst->opcode(); +spv_result_t ValidateExtension(ValidationState_t& _, const Instruction* inst) { + if (spvIsWebGPUEnv(_.context()->target_env)) { + std::string extension = GetExtensionString(&(inst->c_inst())); + + if (extension != ExtensionToString(kSPV_KHR_vulkan_memory_model)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "For WebGPU, the only valid parameter to OpExtension is " + << "\"" << ExtensionToString(kSPV_KHR_vulkan_memory_model) + << "\"."; + } + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateExtInstImport(ValidationState_t& _, + const Instruction* inst) { + if (spvIsWebGPUEnv(_.context()->target_env)) { + const auto name_id = 1; + const std::string name(reinterpret_cast( + inst->words().data() + inst->operands()[name_id].offset)); + if (name != "GLSL.std.450") { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "For WebGPU, the only valid parameter to OpExtInstImport is " + "\"GLSL.std.450\"."; + } + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { const uint32_t result_type = inst->type_id(); const uint32_t num_operands = static_cast(inst->operands().size()); - if (opcode != SpvOpExtInst) return SPV_SUCCESS; - const uint32_t ext_inst_set = inst->word(3); const uint32_t ext_inst_index = inst->word(4); const spv_ext_inst_type_t ext_inst_type = @@ -1986,5 +2016,14 @@ spv_result_t ExtInstPass(ValidationState_t& _, const Instruction* inst) { return SPV_SUCCESS; } +spv_result_t ExtensionPass(ValidationState_t& _, const Instruction* inst) { + const SpvOp opcode = inst->opcode(); + if (opcode == SpvOpExtension) return ValidateExtension(_, inst); + if (opcode == SpvOpExtInstImport) return ValidateExtInstImport(_, inst); + if (opcode == SpvOpExtInst) return ValidateExtInst(_, inst); + + return SPV_SUCCESS; +} + } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/validate_id.cpp b/3rdparty/spirv-tools/source/val/validate_id.cpp index 6359ab600..21a04113d 100644 --- a/3rdparty/spirv-tools/source/val/validate_id.cpp +++ b/3rdparty/spirv-tools/source/val/validate_id.cpp @@ -58,14 +58,13 @@ spv_result_t UpdateIdUse(ValidationState_t& _, const Instruction* inst) { /// /// NOTE: This function does NOT check module scoped functions which are /// checked during the initial binary parse in the IdPass below -spv_result_t CheckIdDefinitionDominateUse(const ValidationState_t& _) { +spv_result_t CheckIdDefinitionDominateUse(ValidationState_t& _) { std::vector phi_instructions; std::unordered_set phi_ids; for (const auto& inst : _.ordered_instructions()) { if (inst.id() == 0) continue; if (const Function* func = inst.function()) { if (const BasicBlock* block = inst.block()) { - if (!block->reachable()) continue; // If the Id is defined within a block then make sure all references to // that Id appear in a blocks that are dominated by the defining block for (auto& use_index_pair : inst.uses()) { @@ -164,8 +163,27 @@ spv_result_t IdPass(ValidationState_t& _, Instruction* inst) { case SPV_OPERAND_TYPE_ID: case SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID: case SPV_OPERAND_TYPE_SCOPE_ID: - if (_.IsDefinedId(operand_word)) { - ret = SPV_SUCCESS; + if (const auto def = _.FindDef(operand_word)) { + const auto opcode = inst->opcode(); + if (spvOpcodeGeneratesType(def->opcode()) && + !spvOpcodeGeneratesType(opcode) && !spvOpcodeIsDebug(opcode) && + !spvOpcodeIsDecoration(opcode) && opcode != SpvOpFunction) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Operand " << _.getIdName(operand_word) + << " cannot be a type"; + } else if (def->type_id() == 0 && !spvOpcodeGeneratesType(opcode) && + !spvOpcodeIsDebug(opcode) && + !spvOpcodeIsDecoration(opcode) && + !spvOpcodeIsBranch(opcode) && opcode != SpvOpPhi && + opcode != SpvOpExtInst && opcode != SpvOpExtInstImport && + opcode != SpvOpSelectionMerge && + opcode != SpvOpLoopMerge && opcode != SpvOpFunction) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Operand " << _.getIdName(operand_word) + << " requires a type"; + } else { + ret = SPV_SUCCESS; + } } else if (can_have_forward_declared_ids(i)) { ret = _.ForwardDeclareId(operand_word); } else { diff --git a/3rdparty/spirv-tools/source/val/validate_image.cpp b/3rdparty/spirv-tools/source/val/validate_image.cpp index 2c020ed1b..8a357ff34 100644 --- a/3rdparty/spirv-tools/source/val/validate_image.cpp +++ b/3rdparty/spirv-tools/source/val/validate_image.cpp @@ -23,6 +23,7 @@ #include "source/spirv_target_env.h" #include "source/util/bitutils.h" #include "source/val/instruction.h" +#include "source/val/validate_scopes.h" #include "source/val/validation_state.h" namespace spvtools { @@ -55,6 +56,13 @@ bool CheckAllImageOperandsHandled() { case SpvImageOperandsConstOffsetsMask: case SpvImageOperandsSampleMask: case SpvImageOperandsMinLodMask: + + // TODO(dneto): Support image operands related to the Vulkan memory model. + // https://gitlab.khronos.org/spirv/spirv-tools/issues/32 + case SpvImageOperandsMakeTexelAvailableKHRMask: + case SpvImageOperandsMakeTexelVisibleKHRMask: + case SpvImageOperandsNonPrivateTexelKHRMask: + case SpvImageOperandsVolatileTexelKHRMask: return true; } return false; @@ -210,7 +218,12 @@ spv_result_t ValidateImageOperands(ValidationState_t& _, const SpvOp opcode = inst->opcode(); const size_t num_words = inst->words().size(); - size_t expected_num_image_operand_words = spvtools::utils::CountSetBits(mask); + // NonPrivate and Volatile take no operand words. + const uint32_t mask_bits_having_operands = + mask & ~uint32_t(SpvImageOperandsNonPrivateTexelKHRMask | + SpvImageOperandsVolatileTexelKHRMask); + size_t expected_num_image_operand_words = + spvtools::utils::CountSetBits(mask_bits_having_operands); if (mask & SpvImageOperandsGradMask) { // Grad uses two words. ++expected_num_image_operand_words; @@ -486,6 +499,48 @@ spv_result_t ValidateImageOperands(ValidationState_t& _, } } + if (mask & SpvImageOperandsMakeTexelAvailableKHRMask) { + // Checked elsewhere: capability and memory model are correct. + if (opcode != SpvOpImageWrite) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Image Operand MakeTexelAvailableKHR can only be used with Op" + << spvOpcodeString(SpvOpImageWrite) << ": Op" + << spvOpcodeString(opcode); + } + + if (!(mask & SpvImageOperandsNonPrivateTexelKHRMask)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Image Operand MakeTexelAvailableKHR requires " + "NonPrivateTexelKHR is also specified: Op" + << spvOpcodeString(opcode); + } + + const auto available_scope = inst->word(word_index++); + if (auto error = ValidateMemoryScope(_, inst, available_scope)) + return error; + } + + if (mask & SpvImageOperandsMakeTexelVisibleKHRMask) { + // Checked elsewhere: capability and memory model are correct. + if (opcode != SpvOpImageRead && opcode != SpvOpImageSparseRead) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Image Operand MakeTexelVisibleKHR can only be used with Op" + << spvOpcodeString(SpvOpImageRead) << " or Op" + << spvOpcodeString(SpvOpImageSparseRead) << ": Op" + << spvOpcodeString(opcode); + } + + if (!(mask & SpvImageOperandsNonPrivateTexelKHRMask)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Image Operand MakeTexelVisibleKHR requires NonPrivateTexelKHR " + "is also specified: Op" + << spvOpcodeString(opcode); + } + + const auto visible_scope = inst->word(word_index++); + if (auto error = ValidateMemoryScope(_, inst, visible_scope)) return error; + } + return SPV_SUCCESS; } @@ -781,6 +836,110 @@ spv_result_t ValidateSampledImage(ValidationState_t& _, return SPV_SUCCESS; } +spv_result_t ValidateImageTexelPointer(ValidationState_t& _, + const Instruction* inst) { + const auto result_type = _.FindDef(inst->type_id()); + if (result_type->opcode() != SpvOpTypePointer) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Result Type to be OpTypePointer"; + } + + const auto storage_class = result_type->GetOperandAs(1); + if (storage_class != SpvStorageClassImage) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Result Type to be OpTypePointer whose Storage Class " + "operand is Image"; + } + + const auto ptr_type = result_type->GetOperandAs(2); + const auto ptr_opcode = _.GetIdOpcode(ptr_type); + if (ptr_opcode != SpvOpTypeInt && ptr_opcode != SpvOpTypeFloat && + ptr_opcode != SpvOpTypeVoid) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Result Type to be OpTypePointer whose Type operand " + "must be a scalar numerical type or OpTypeVoid"; + } + + const auto image_ptr = _.FindDef(_.GetOperandTypeId(inst, 2)); + if (!image_ptr || image_ptr->opcode() != SpvOpTypePointer) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Image to be OpTypePointer"; + } + + const auto image_type = image_ptr->GetOperandAs(2); + if (_.GetIdOpcode(image_type) != SpvOpTypeImage) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Image to be OpTypePointer with Type OpTypeImage"; + } + + ImageTypeInfo info; + if (!GetImageTypeInfo(_, image_type, &info)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Corrupt image type definition"; + } + + if (info.sampled_type != ptr_type) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Image 'Sampled Type' to be the same as the Type " + "pointed to by Result Type"; + } + + if (info.dim == SpvDimSubpassData) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Image Dim SubpassData cannot be used with OpImageTexelPointer"; + } + + const uint32_t coord_type = _.GetOperandTypeId(inst, 3); + if (!coord_type || !_.IsIntScalarOrVectorType(coord_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Coordinate to be integer scalar or vector"; + } + + uint32_t expected_coord_size = 0; + if (info.arrayed == 0) { + expected_coord_size = GetPlaneCoordSize(info); + } else if (info.arrayed == 1) { + switch (info.dim) { + case SpvDim1D: + expected_coord_size = 2; + break; + case SpvDimCube: + case SpvDim2D: + expected_coord_size = 3; + break; + default: + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Image 'Dim' must be one of 1D, 2D, or Cube when " + "Arrayed is 1"; + break; + } + } + + const uint32_t actual_coord_size = _.GetDimension(coord_type); + if (expected_coord_size != actual_coord_size) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Coordinate to have " << expected_coord_size + << " components, but given " << actual_coord_size; + } + + const uint32_t sample_type = _.GetOperandTypeId(inst, 4); + if (!sample_type || !_.IsIntScalarType(sample_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Sample to be integer scalar"; + } + + if (info.multisampled == 0) { + uint64_t ms = 0; + if (!_.GetConstantValUint64(inst->GetOperandAs(4), &ms) || + ms != 0) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Sample for Image with MS 0 to be a valid for " + "the value 0"; + } + } + return SPV_SUCCESS; +} + spv_result_t ValidateImageLod(ValidationState_t& _, const Instruction* inst) { const SpvOp opcode = inst->opcode(); uint32_t actual_result_type = 0; @@ -1358,57 +1517,45 @@ spv_result_t ValidateImageQuerySize(ValidationState_t& _, << "Expected Image to be of type OpTypeImage"; } -#if 0 - // TODO(atgoo@github.com) The spec doesn't whitelist all Dims supported by - // GLSL. Need to verify if there is an error and reenable. ImageTypeInfo info; if (!GetImageTypeInfo(_, image_type, &info)) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Corrupt image type definition"; + << "Corrupt image type definition"; } uint32_t expected_num_components = info.arrayed; switch (info.dim) { + case SpvDim1D: case SpvDimBuffer: expected_num_components += 1; break; case SpvDim2D: - if (info.multisampled != 1 && info.sampled != 0 && - info.sampled != 2) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Expected either 'MS'=1 or 'Sampled'=0 or 'Sampled'=2 " - << "for 2D dim"; - } + case SpvDimCube: case SpvDimRect: expected_num_components += 2; break; case SpvDim3D: expected_num_components += 3; - if (info.sampled != 0 && - info.sampled != 2) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Expected either 'Sampled'=0 or 'Sampled'=2 " - << "for 3D dim"; - } break; default: return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Image 'Dim' must be Buffer, 2D, 3D or Rect"; + << "Image 'Dim' must be 1D, Buffer, 2D, Cube, 3D or Rect"; } - - if (info.multisampled != 0) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Image 'MS' must be 0"; + if (info.dim == SpvDim1D || info.dim == SpvDim2D || info.dim == SpvDim3D || + info.dim == SpvDimCube) { + if (info.multisampled != 1 && info.sampled != 0 && info.sampled != 2) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Image must have either 'MS'=1 or 'Sampled'=0 or 'Sampled'=2"; + } } uint32_t result_num_components = _.GetDimension(result_type); if (result_num_components != expected_num_components) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Result Type has " << result_num_components << " components, " - << "but " << expected_num_components << " expected"; + << "Result Type has " << result_num_components << " components, " + << "but " << expected_num_components << " expected"; } -#endif return SPV_SUCCESS; } @@ -1568,6 +1715,8 @@ spv_result_t ImagePass(ValidationState_t& _, const Instruction* inst) { return ValidateTypeSampledImage(_, inst); case SpvOpSampledImage: return ValidateSampledImage(_, inst); + case SpvOpImageTexelPointer: + return ValidateImageTexelPointer(_, inst); case SpvOpImageSampleImplicitLod: case SpvOpImageSampleExplicitLod: diff --git a/3rdparty/spirv-tools/source/val/validate_instruction.cpp b/3rdparty/spirv-tools/source/val/validate_instruction.cpp index 85995caa3..17949d22a 100644 --- a/3rdparty/spirv-tools/source/val/validate_instruction.cpp +++ b/3rdparty/spirv-tools/source/val/validate_instruction.cpp @@ -89,7 +89,7 @@ CapabilitySet EnablingCapabilitiesForOp(const ValidationState_t& state, // Returns SPV_SUCCESS if the given operand is enabled by capabilities declared // in the module. Otherwise issues an error message and returns // SPV_ERROR_INVALID_CAPABILITY. -spv_result_t CheckRequiredCapabilities(const ValidationState_t& state, +spv_result_t CheckRequiredCapabilities(ValidationState_t& state, const Instruction* inst, size_t which_operand, spv_operand_type_t type, @@ -429,88 +429,16 @@ spv_result_t LimitCheckNumVars(ValidationState_t& _, const uint32_t var_id, return SPV_SUCCESS; } -// Registers necessary decoration(s) for the appropriate IDs based on the -// instruction. -spv_result_t RegisterDecorations(ValidationState_t& _, - const Instruction* inst) { - switch (inst->opcode()) { - case SpvOpDecorate: { - const uint32_t target_id = inst->word(1); - const SpvDecoration dec_type = static_cast(inst->word(2)); - std::vector dec_params; - if (inst->words().size() > 3) { - dec_params.insert(dec_params.end(), inst->words().begin() + 3, - inst->words().end()); - } - _.RegisterDecorationForId(target_id, Decoration(dec_type, dec_params)); - break; - } - case SpvOpMemberDecorate: { - const uint32_t struct_id = inst->word(1); - const uint32_t index = inst->word(2); - const SpvDecoration dec_type = static_cast(inst->word(3)); - std::vector dec_params; - if (inst->words().size() > 4) { - dec_params.insert(dec_params.end(), inst->words().begin() + 4, - inst->words().end()); - } - _.RegisterDecorationForId(struct_id, - Decoration(dec_type, dec_params, index)); - break; - } - case SpvOpDecorationGroup: { - // We don't need to do anything right now. Assigning decorations to groups - // will be taken care of via OpGroupDecorate. - break; - } - case SpvOpGroupDecorate: { - // Word 1 is the group . All subsequent words are target s that - // are going to be decorated with the decorations. - const uint32_t decoration_group_id = inst->word(1); - std::vector& group_decorations = - _.id_decorations(decoration_group_id); - for (size_t i = 2; i < inst->words().size(); ++i) { - const uint32_t target_id = inst->word(i); - _.RegisterDecorationsForId(target_id, group_decorations.begin(), - group_decorations.end()); - } - break; - } - case SpvOpGroupMemberDecorate: { - // Word 1 is the Decoration Group followed by (struct,literal) - // pairs. All decorations of the group should be applied to all the struct - // members that are specified in the instructions. - const uint32_t decoration_group_id = inst->word(1); - std::vector& group_decorations = - _.id_decorations(decoration_group_id); - // Grammar checks ensures that the number of arguments to this instruction - // is an odd number: 1 decoration group + (id,literal) pairs. - for (size_t i = 2; i + 1 < inst->words().size(); i = i + 2) { - const uint32_t struct_id = inst->word(i); - const uint32_t index = inst->word(i + 1); - // ID validation phase ensures this is in fact a struct instruction and - // that the index is not out of bound. - _.RegisterDecorationsForStructMember(struct_id, index, - group_decorations.begin(), - group_decorations.end()); - } - break; - } - default: - break; - } - return SPV_SUCCESS; -} - // Parses OpExtension instruction and logs warnings if unsuccessful. -void CheckIfKnownExtension(ValidationState_t& _, const Instruction* inst) { +spv_result_t CheckIfKnownExtension(ValidationState_t& _, + const Instruction* inst) { const std::string extension_str = GetExtensionString(&(inst->c_inst())); Extension extension; if (!GetExtensionFromString(extension_str.c_str(), &extension)) { - _.diag(SPV_ERROR_INVALID_BINARY, inst) - << "Found unrecognized extension " << extension_str; - return; + return _.diag(SPV_WARNING, inst) + << "Found unrecognized extension " << extension_str; } + return SPV_SUCCESS; } } // namespace @@ -528,6 +456,24 @@ spv_result_t InstructionPass(ValidationState_t& _, const Instruction* inst) { } _.set_addressing_model(inst->GetOperandAs(0)); _.set_memory_model(inst->GetOperandAs(1)); + + if (_.memory_model() != SpvMemoryModelVulkanKHR && + _.HasCapability(SpvCapabilityVulkanMemoryModelKHR)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "VulkanMemoryModelKHR capability must only be specified if the " + "VulkanKHR memory model is used."; + } + + if (spvIsWebGPUEnv(_.context()->target_env)) { + if (_.addressing_model() != SpvAddressingModelLogical) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Addressing model must be Logical for WebGPU environment."; + } + if (_.memory_model() != SpvMemoryModelVulkanKHR) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Memory model must be VulkanKHR for WebGPU environment."; + } + } } else if (opcode == SpvOpExecutionMode) { const uint32_t entry_point = inst->word(1); _.RegisterExecutionModeForEntryPoint(entry_point, @@ -572,10 +518,6 @@ spv_result_t InstructionPass(ValidationState_t& _, const Instruction* inst) { "capability is used."; } - // In order to validate decoration rules, we need to know all the decorations - // that are applied to any given . - RegisterDecorations(_, inst); - if (auto error = ExtensionCheck(_, inst)) return error; if (auto error = ReservedCheck(_, inst)) return error; if (auto error = EnvironmentCheck(_, inst)) return error; diff --git a/3rdparty/spirv-tools/source/val/validate_memory.cpp b/3rdparty/spirv-tools/source/val/validate_memory.cpp index 18c3cca0f..d1a64428c 100644 --- a/3rdparty/spirv-tools/source/val/validate_memory.cpp +++ b/3rdparty/spirv-tools/source/val/validate_memory.cpp @@ -19,7 +19,9 @@ #include #include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" +#include "source/val/validate_scopes.h" #include "source/val/validation_state.h" namespace spvtools { @@ -35,6 +37,21 @@ bool HaveSameLayoutDecorations(ValidationState_t&, const Instruction*, bool HasConflictingMemberOffsets(const std::vector&, const std::vector&); +bool IsAllowedTypeOrArrayOfSame(ValidationState_t& _, const Instruction* type, + std::initializer_list allowed) { + if (std::find(allowed.begin(), allowed.end(), type->opcode()) != + allowed.end()) { + return true; + } + if (type->opcode() == SpvOpTypeArray || + type->opcode() == SpvOpTypeRuntimeArray) { + auto elem_type = _.FindDef(type->word(2)); + return std::find(allowed.begin(), allowed.end(), elem_type->opcode()) != + allowed.end(); + } + return false; +} + // Returns true if the two instructions represent structs that, as far as the // validator can tell, have the exact same data layout. bool AreLayoutCompatibleStructs(ValidationState_t& _, const Instruction* type1, @@ -57,9 +74,9 @@ bool AreLayoutCompatibleStructs(ValidationState_t& _, const Instruction* type1, bool HaveLayoutCompatibleMembers(ValidationState_t& _, const Instruction* type1, const Instruction* type2) { assert(type1->opcode() == SpvOpTypeStruct && - "type1 must be and OpTypeStruct instruction."); + "type1 must be an OpTypeStruct instruction."); assert(type2->opcode() == SpvOpTypeStruct && - "type2 must be and OpTypeStruct instruction."); + "type2 must be an OpTypeStruct instruction."); const auto& type1_operands = type1->operands(); const auto& type2_operands = type2->operands(); if (type1_operands.size() != type2_operands.size()) { @@ -84,9 +101,9 @@ bool HaveLayoutCompatibleMembers(ValidationState_t& _, const Instruction* type1, bool HaveSameLayoutDecorations(ValidationState_t& _, const Instruction* type1, const Instruction* type2) { assert(type1->opcode() == SpvOpTypeStruct && - "type1 must be and OpTypeStruct instruction."); + "type1 must be an OpTypeStruct instruction."); assert(type2->opcode() == SpvOpTypeStruct && - "type2 must be and OpTypeStruct instruction."); + "type2 must be an OpTypeStruct instruction."); const std::vector& type1_decorations = _.id_decorations(type1->id()); const std::vector& type2_decorations = @@ -139,40 +156,365 @@ bool HasConflictingMemberOffsets( return false; } -spv_result_t ValidateVariable(ValidationState_t& _, const Instruction& inst) { - auto result_type = _.FindDef(inst.type_id()); - if (!result_type || result_type->opcode() != SpvOpTypePointer) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) - << "OpVariable Result Type '" << _.getIdName(inst.type_id()) - << "' is not a pointer type."; +// If |skip_builtin| is true, returns true if |storage| contains bool within +// it and no storage that contains the bool is builtin. +// If |skip_builtin| is false, returns true if |storage| contains bool within +// it. +bool ContainsInvalidBool(ValidationState_t& _, const Instruction* storage, + bool skip_builtin) { + if (skip_builtin) { + for (const Decoration& decoration : _.id_decorations(storage->id())) { + if (decoration.dec_type() == SpvDecorationBuiltIn) return false; + } } - const auto initializer_index = 3; - if (initializer_index < inst.operands().size()) { - const auto initializer_id = inst.GetOperandAs(initializer_index); - const auto initializer = _.FindDef(initializer_id); - const auto storage_class_index = 2; - const auto is_module_scope_var = - initializer && (initializer->opcode() == SpvOpVariable) && - (initializer->GetOperandAs(storage_class_index) != - SpvStorageClassFunction); - const auto is_constant = - initializer && spvOpcodeIsConstant(initializer->opcode()); - if (!initializer || !(is_constant || is_module_scope_var)) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) - << "OpVariable Initializer '" << _.getIdName(initializer_id) - << "' is not a constant or module-scope variable."; + const size_t elem_type_index = 1; + uint32_t elem_type_id; + Instruction* elem_type; + + switch (storage->opcode()) { + case SpvOpTypeBool: + return true; + case SpvOpTypeVector: + case SpvOpTypeMatrix: + case SpvOpTypeArray: + case SpvOpTypeRuntimeArray: + elem_type_id = storage->GetOperandAs(elem_type_index); + elem_type = _.FindDef(elem_type_id); + return ContainsInvalidBool(_, elem_type, skip_builtin); + case SpvOpTypeStruct: + for (size_t member_type_index = 1; + member_type_index < storage->operands().size(); + ++member_type_index) { + auto member_type_id = + storage->GetOperandAs(member_type_index); + auto member_type = _.FindDef(member_type_id); + if (ContainsInvalidBool(_, member_type, skip_builtin)) return true; + } + default: + break; + } + return false; +} + +std::pair GetStorageClass( + ValidationState_t& _, const Instruction* inst) { + SpvStorageClass dst_sc = SpvStorageClassMax; + SpvStorageClass src_sc = SpvStorageClassMax; + switch (inst->opcode()) { + case SpvOpLoad: { + auto load_pointer = _.FindDef(inst->GetOperandAs(2)); + auto load_pointer_type = _.FindDef(load_pointer->type_id()); + dst_sc = load_pointer_type->GetOperandAs(1); + break; + } + case SpvOpStore: { + auto store_pointer = _.FindDef(inst->GetOperandAs(0)); + auto store_pointer_type = _.FindDef(store_pointer->type_id()); + dst_sc = store_pointer_type->GetOperandAs(1); + break; + } + case SpvOpCopyMemory: + case SpvOpCopyMemorySized: { + auto dst = _.FindDef(inst->GetOperandAs(0)); + auto dst_type = _.FindDef(dst->type_id()); + dst_sc = dst_type->GetOperandAs(1); + auto src = _.FindDef(inst->GetOperandAs(1)); + auto src_type = _.FindDef(src->type_id()); + src_sc = src_type->GetOperandAs(1); + break; + } + default: + break; + } + + return std::make_pair(dst_sc, src_sc); +} + +// This function is only called for OpLoad, OpStore, OpCopyMemory and +// OpCopyMemorySized. +uint32_t GetMakeAvailableScope(const Instruction* inst, uint32_t mask) { + uint32_t offset = 1; + if (mask & SpvMemoryAccessAlignedMask) ++offset; + + uint32_t scope_id = 0; + switch (inst->opcode()) { + case SpvOpLoad: + case SpvOpCopyMemorySized: + return inst->GetOperandAs(3 + offset); + case SpvOpStore: + case SpvOpCopyMemory: + return inst->GetOperandAs(2 + offset); + default: + assert(false && "unexpected opcode"); + break; + } + + return scope_id; +} + +// This function is only called for OpLoad, OpStore, OpCopyMemory and +// OpCopyMemorySized. +uint32_t GetMakeVisibleScope(const Instruction* inst, uint32_t mask) { + uint32_t offset = 1; + if (mask & SpvMemoryAccessAlignedMask) ++offset; + if (mask & SpvMemoryAccessMakePointerAvailableKHRMask) ++offset; + + uint32_t scope_id = 0; + switch (inst->opcode()) { + case SpvOpLoad: + case SpvOpCopyMemorySized: + return inst->GetOperandAs(3 + offset); + case SpvOpStore: + case SpvOpCopyMemory: + return inst->GetOperandAs(2 + offset); + default: + assert(false && "unexpected opcode"); + break; + } + + return scope_id; +} + +spv_result_t CheckMemoryAccess(ValidationState_t& _, const Instruction* inst, + uint32_t mask) { + if (mask & SpvMemoryAccessMakePointerAvailableKHRMask) { + if (inst->opcode() == SpvOpLoad) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "MakePointerAvailableKHR cannot be used with OpLoad."; + } + + if (!(mask & SpvMemoryAccessNonPrivatePointerKHRMask)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "NonPrivatePointerKHR must be specified if " + "MakePointerAvailableKHR is specified."; + } + + // Check the associated scope for MakeAvailableKHR. + const auto available_scope = GetMakeAvailableScope(inst, mask); + if (auto error = ValidateMemoryScope(_, inst, available_scope)) + return error; + } + + if (mask & SpvMemoryAccessMakePointerVisibleKHRMask) { + if (inst->opcode() == SpvOpStore) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "MakePointerVisibleKHR cannot be used with OpStore."; + } + + if (!(mask & SpvMemoryAccessNonPrivatePointerKHRMask)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "NonPrivatePointerKHR must be specified if " + "MakePointerVisibleKHR is specified."; + } + + // Check the associated scope for MakeVisibleKHR. + const auto visible_scope = GetMakeVisibleScope(inst, mask); + if (auto error = ValidateMemoryScope(_, inst, visible_scope)) return error; + } + + if (mask & SpvMemoryAccessNonPrivatePointerKHRMask) { + SpvStorageClass dst_sc, src_sc; + std::tie(dst_sc, src_sc) = GetStorageClass(_, inst); + if (dst_sc != SpvStorageClassUniform && + dst_sc != SpvStorageClassWorkgroup && + dst_sc != SpvStorageClassCrossWorkgroup && + dst_sc != SpvStorageClassGeneric && dst_sc != SpvStorageClassImage && + dst_sc != SpvStorageClassStorageBuffer) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or StorageBuffer " + "storage classes."; + } + if (src_sc != SpvStorageClassMax && src_sc != SpvStorageClassUniform && + src_sc != SpvStorageClassWorkgroup && + src_sc != SpvStorageClassCrossWorkgroup && + src_sc != SpvStorageClassGeneric && src_sc != SpvStorageClassImage && + src_sc != SpvStorageClassStorageBuffer) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or StorageBuffer " + "storage classes."; } } return SPV_SUCCESS; } -spv_result_t ValidateLoad(ValidationState_t& _, const Instruction& inst) { - const auto result_type = _.FindDef(inst.type_id()); +spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { + auto result_type = _.FindDef(inst->type_id()); + if (!result_type || result_type->opcode() != SpvOpTypePointer) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpVariable Result Type '" << _.getIdName(inst->type_id()) + << "' is not a pointer type."; + } + + const auto initializer_index = 3; + const auto storage_class_index = 2; + if (initializer_index < inst->operands().size()) { + const auto initializer_id = inst->GetOperandAs(initializer_index); + const auto initializer = _.FindDef(initializer_id); + const auto is_module_scope_var = + initializer && (initializer->opcode() == SpvOpVariable) && + (initializer->GetOperandAs(storage_class_index) != + SpvStorageClassFunction); + const auto is_constant = + initializer && spvOpcodeIsConstant(initializer->opcode()); + if (!initializer || !(is_constant || is_module_scope_var)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpVariable Initializer '" << _.getIdName(initializer_id) + << "' is not a constant or module-scope variable."; + } + } + + const auto storage_class = + inst->GetOperandAs(storage_class_index); + if (storage_class != SpvStorageClassWorkgroup && + storage_class != SpvStorageClassCrossWorkgroup && + storage_class != SpvStorageClassPrivate && + storage_class != SpvStorageClassFunction && + storage_class != SpvStorageClassRayPayloadNV && + storage_class != SpvStorageClassIncomingRayPayloadNV && + storage_class != SpvStorageClassHitAttributeNV && + storage_class != SpvStorageClassCallableDataNV && + storage_class != SpvStorageClassIncomingCallableDataNV) { + const auto storage_index = 2; + const auto storage_id = result_type->GetOperandAs(storage_index); + const auto storage = _.FindDef(storage_id); + bool storage_input_or_output = storage_class == SpvStorageClassInput || + storage_class == SpvStorageClassOutput; + bool builtin = false; + if (storage_input_or_output) { + for (const Decoration& decoration : _.id_decorations(inst->id())) { + if (decoration.dec_type() == SpvDecorationBuiltIn) { + builtin = true; + break; + } + } + } + if (!(storage_input_or_output && builtin) && + ContainsInvalidBool(_, storage, storage_input_or_output)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "If OpTypeBool is stored in conjunction with OpVariable, it " + << "can only be used with non-externally visible shader Storage " + << "Classes: Workgroup, CrossWorkgroup, Private, and Function"; + } + } + + // SPIR-V 3.32.8: Check that pointer type and variable type have the same + // storage class. + const auto result_storage_class_index = 1; + const auto result_storage_class = + result_type->GetOperandAs(result_storage_class_index); + if (storage_class != result_storage_class) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "From SPIR-V spec, section 3.32.8 on OpVariable:\n" + << "Its Storage Class operand must be the same as the Storage Class " + << "operand of the result type."; + } + + // Variable pointer related restrictions. + auto pointee = _.FindDef(result_type->word(3)); + if (_.addressing_model() == SpvAddressingModelLogical && + !_.options()->relax_logical_pointer) { + // VariablePointersStorageBuffer is implied by VariablePointers. + if (pointee->opcode() == SpvOpTypePointer) { + if (!_.HasCapability(SpvCapabilityVariablePointersStorageBuffer)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) << "In Logical addressing, " + "variables may not " + "allocate a pointer type"; + } else if (storage_class != SpvStorageClassFunction && + storage_class != SpvStorageClassPrivate) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "In Logical addressing with variable pointers, variables " + "that allocate pointers must be in Function or Private " + "storage classes"; + } + } + } + + // Vulkan 14.5.1: Check type of PushConstant variables. + // Vulkan 14.5.2: Check type of UniformConstant and Uniform variables. + if (spvIsVulkanEnv(_.context()->target_env)) { + if (storage_class == SpvStorageClassPushConstant) { + if (!IsAllowedTypeOrArrayOfSame(_, pointee, {SpvOpTypeStruct})) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "PushConstant OpVariable '" << _.getIdName(inst->id()) + << "' has illegal type.\n" + << "From Vulkan spec, section 14.5.1:\n" + << "Such variables must be typed as OpTypeStruct, " + << "or an array of this type"; + } + } + + if (storage_class == SpvStorageClassUniformConstant) { + if (!IsAllowedTypeOrArrayOfSame( + _, pointee, + {SpvOpTypeImage, SpvOpTypeSampler, SpvOpTypeSampledImage, + SpvOpTypeAccelerationStructureNV})) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "UniformConstant OpVariable '" << _.getIdName(inst->id()) + << "' has illegal type.\n" + << "From Vulkan spec, section 14.5.2:\n" + << "Variables identified with the UniformConstant storage class " + << "are used only as handles to refer to opaque resources. Such " + << "variables must be typed as OpTypeImage, OpTypeSampler, " + << "OpTypeSampledImage, OpTypeAccelerationStructureNV, " + << "or an array of one of these types."; + } + } + + if (storage_class == SpvStorageClassUniform) { + if (!IsAllowedTypeOrArrayOfSame(_, pointee, {SpvOpTypeStruct})) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Uniform OpVariable '" << _.getIdName(inst->id()) + << "' has illegal type.\n" + << "From Vulkan spec, section 14.5.2:\n" + << "Variables identified with the Uniform storage class are " + "used " + << "to access transparent buffer backed resources. Such " + "variables " + << "must be typed as OpTypeStruct, or an array of this type"; + } + } + } + + // WebGPU & Vulkan Appendix A: Check that if contains initializer, then + // storage class is Output, Private, or Function. + if (inst->operands().size() > 3 && storage_class != SpvStorageClassOutput && + storage_class != SpvStorageClassPrivate && + storage_class != SpvStorageClassFunction) { + if (spvIsVulkanEnv(_.context()->target_env)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpVariable, '" << _.getIdName(inst->id()) + << "', has a disallowed initializer & storage class " + << "combination.\n" + << "From Vulkan spec, Appendix A:\n" + << "Variable declarations that include initializers must have " + << "one of the following storage classes: Output, Private, or " + << "Function"; + } + + if (spvIsWebGPUEnv(_.context()->target_env)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpVariable, '" << _.getIdName(inst->id()) + << "', has a disallowed initializer & storage class " + << "combination.\n" + << "From WebGPU execution environment spec:\n" + << "Variable declarations that include initializers must have " + << "one of the following storage classes: Output, Private, or " + << "Function"; + } + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateLoad(ValidationState_t& _, const Instruction* inst) { + const auto result_type = _.FindDef(inst->type_id()); if (!result_type) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) - << "OpLoad Result Type '" << _.getIdName(inst.type_id()) + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpLoad Result Type '" << _.getIdName(inst->type_id()) << "' is not defined."; } @@ -180,7 +522,7 @@ spv_result_t ValidateLoad(ValidationState_t& _, const Instruction& inst) { _.features().variable_pointers || _.features().variable_pointers_storage_buffer; const auto pointer_index = 2; - const auto pointer_id = inst.GetOperandAs(pointer_index); + const auto pointer_id = inst->GetOperandAs(pointer_index); const auto pointer = _.FindDef(pointer_id); if (!pointer || ((_.addressing_model() == SpvAddressingModelLogical) && @@ -188,35 +530,41 @@ spv_result_t ValidateLoad(ValidationState_t& _, const Instruction& inst) { !spvOpcodeReturnsLogicalPointer(pointer->opcode())) || (uses_variable_pointers && !spvOpcodeReturnsLogicalVariablePointer(pointer->opcode()))))) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpLoad Pointer '" << _.getIdName(pointer_id) << "' is not a logical pointer."; } const auto pointer_type = _.FindDef(pointer->type_id()); if (!pointer_type || pointer_type->opcode() != SpvOpTypePointer) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpLoad type for pointer '" << _.getIdName(pointer_id) << "' is not a pointer type."; } const auto pointee_type = _.FindDef(pointer_type->GetOperandAs(2)); if (!pointee_type || result_type->id() != pointee_type->id()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) - << "OpLoad Result Type '" << _.getIdName(inst.type_id()) + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpLoad Result Type '" << _.getIdName(inst->type_id()) << "' does not match Pointer '" << _.getIdName(pointer->id()) << "'s type."; } + if (inst->operands().size() > 3) { + if (auto error = + CheckMemoryAccess(_, inst, inst->GetOperandAs(3))) + return error; + } + return SPV_SUCCESS; } -spv_result_t ValidateStore(ValidationState_t& _, const Instruction& inst) { +spv_result_t ValidateStore(ValidationState_t& _, const Instruction* inst) { const bool uses_variable_pointer = _.features().variable_pointers || _.features().variable_pointers_storage_buffer; const auto pointer_index = 0; - const auto pointer_id = inst.GetOperandAs(pointer_index); + const auto pointer_id = inst->GetOperandAs(pointer_index); const auto pointer = _.FindDef(pointer_id); if (!pointer || (_.addressing_model() == SpvAddressingModelLogical && @@ -224,20 +572,20 @@ spv_result_t ValidateStore(ValidationState_t& _, const Instruction& inst) { !spvOpcodeReturnsLogicalPointer(pointer->opcode())) || (uses_variable_pointer && !spvOpcodeReturnsLogicalVariablePointer(pointer->opcode()))))) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Pointer '" << _.getIdName(pointer_id) << "' is not a logical pointer."; } const auto pointer_type = _.FindDef(pointer->type_id()); if (!pointer_type || pointer_type->opcode() != SpvOpTypePointer) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore type for pointer '" << _.getIdName(pointer_id) << "' is not a pointer type."; } const auto type_id = pointer_type->GetOperandAs(2); const auto type = _.FindDef(type_id); if (!type || SpvOpTypeVoid == type->opcode()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Pointer '" << _.getIdName(pointer_id) << "'s type is void."; } @@ -247,7 +595,7 @@ spv_result_t ValidateStore(ValidationState_t& _, const Instruction& inst) { uint32_t data_type; uint32_t storage_class; if (!_.GetPointerTypeInfo(pointer_type->id(), &data_type, &storage_class)) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Pointer '" << _.getIdName(pointer_id) << "' is not pointer type"; } @@ -255,23 +603,23 @@ spv_result_t ValidateStore(ValidationState_t& _, const Instruction& inst) { if (storage_class == SpvStorageClassUniformConstant || storage_class == SpvStorageClassInput || storage_class == SpvStorageClassPushConstant) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Pointer '" << _.getIdName(pointer_id) << "' storage class is read-only"; } } const auto object_index = 1; - const auto object_id = inst.GetOperandAs(object_index); + const auto object_id = inst->GetOperandAs(object_index); const auto object = _.FindDef(object_id); if (!object || !object->type_id()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Object '" << _.getIdName(object_id) << "' is not an object."; } const auto object_type = _.FindDef(object->type_id()); if (!object_type || SpvOpTypeVoid == object_type->opcode()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Object '" << _.getIdName(object_id) << "'s type is void."; } @@ -279,7 +627,7 @@ spv_result_t ValidateStore(ValidationState_t& _, const Instruction& inst) { if (type->id() != object_type->id()) { if (!_.options()->relax_struct_store || type->opcode() != SpvOpTypeStruct || object_type->opcode() != SpvOpTypeStruct) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Pointer '" << _.getIdName(pointer_id) << "'s type does not match Object '" << _.getIdName(object->id()) << "'s type."; @@ -287,30 +635,37 @@ spv_result_t ValidateStore(ValidationState_t& _, const Instruction& inst) { // TODO: Check for layout compatible matricies and arrays as well. if (!AreLayoutCompatibleStructs(_, type, object_type)) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpStore Pointer '" << _.getIdName(pointer_id) << "'s layout does not match Object '" << _.getIdName(object->id()) << "'s layout."; } } + + if (inst->operands().size() > 2) { + if (auto error = + CheckMemoryAccess(_, inst, inst->GetOperandAs(2))) + return error; + } + return SPV_SUCCESS; } -spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { +spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction* inst) { const auto target_index = 0; - const auto target_id = inst.GetOperandAs(target_index); + const auto target_id = inst->GetOperandAs(target_index); const auto target = _.FindDef(target_id); if (!target) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Target operand '" << _.getIdName(target_id) << "' is not defined."; } const auto source_index = 1; - const auto source_id = inst.GetOperandAs(source_index); + const auto source_id = inst->GetOperandAs(source_index); const auto source = _.FindDef(source_id); if (!source) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Source operand '" << _.getIdName(source_id) << "' is not defined."; } @@ -318,7 +673,7 @@ spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { const auto target_pointer_type = _.FindDef(target->type_id()); if (!target_pointer_type || target_pointer_type->opcode() != SpvOpTypePointer) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Target operand '" << _.getIdName(target_id) << "' is not a pointer."; } @@ -326,16 +681,16 @@ spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { const auto source_pointer_type = _.FindDef(source->type_id()); if (!source_pointer_type || source_pointer_type->opcode() != SpvOpTypePointer) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Source operand '" << _.getIdName(source_id) << "' is not a pointer."; } - if (inst.opcode() == SpvOpCopyMemory) { + if (inst->opcode() == SpvOpCopyMemory) { const auto target_type = _.FindDef(target_pointer_type->GetOperandAs(2)); if (!target_type || target_type->opcode() == SpvOpTypeVoid) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Target operand '" << _.getIdName(target_id) << "' cannot be a void pointer."; } @@ -343,29 +698,35 @@ spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { const auto source_type = _.FindDef(source_pointer_type->GetOperandAs(2)); if (!source_type || source_type->opcode() == SpvOpTypeVoid) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Source operand '" << _.getIdName(source_id) << "' cannot be a void pointer."; } if (target_type->id() != source_type->id()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Target '" << _.getIdName(source_id) << "'s type does not match Source '" << _.getIdName(source_type->id()) << "'s type."; } + + if (inst->operands().size() > 2) { + if (auto error = + CheckMemoryAccess(_, inst, inst->GetOperandAs(2))) + return error; + } } else { - const auto size_id = inst.GetOperandAs(2); + const auto size_id = inst->GetOperandAs(2); const auto size = _.FindDef(size_id); if (!size) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Size operand '" << _.getIdName(size_id) << "' is not defined."; } const auto size_type = _.FindDef(size->type_id()); if (!_.IsIntScalarType(size_type->id())) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Size operand '" << _.getIdName(size_id) << "' must be a scalar integer type."; } @@ -373,13 +734,13 @@ spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { bool is_zero = true; switch (size->opcode()) { case SpvOpConstantNull: - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Size operand '" << _.getIdName(size_id) << "' cannot be a constant zero."; case SpvOpConstant: if (size_type->word(3) == 1 && size->word(size->words().size() - 1) & 0x80000000) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Size operand '" << _.getIdName(size_id) << "' cannot have the sign bit set to 1."; } @@ -387,7 +748,7 @@ spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { is_zero &= (size->word(i) == 0); } if (is_zero) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Size operand '" << _.getIdName(size_id) << "' cannot be a constant zero."; } @@ -396,21 +757,27 @@ spv_result_t ValidateCopyMemory(ValidationState_t& _, const Instruction& inst) { // Cannot infer any other opcodes. break; } + + if (inst->operands().size() > 3) { + if (auto error = + CheckMemoryAccess(_, inst, inst->GetOperandAs(3))) + return error; + } } return SPV_SUCCESS; } spv_result_t ValidateAccessChain(ValidationState_t& _, - const Instruction& inst) { + const Instruction* inst) { std::string instr_name = - "Op" + std::string(spvOpcodeString(static_cast(inst.opcode()))); + "Op" + std::string(spvOpcodeString(static_cast(inst->opcode()))); // The result type must be OpTypePointer. - auto result_type = _.FindDef(inst.type_id()); + auto result_type = _.FindDef(inst->type_id()); if (SpvOpTypePointer != result_type->opcode()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "The Result Type of " << instr_name << " '" - << _.getIdName(inst.id()) << "' must be OpTypePointer. Found Op" + << _.getIdName(inst->id()) << "' must be OpTypePointer. Found Op" << spvOpcodeString(static_cast(result_type->opcode())) << "."; } @@ -421,11 +788,11 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, // Base must be a pointer, pointing to the base of a composite object. const auto base_index = 2; - const auto base_id = inst.GetOperandAs(base_index); + const auto base_id = inst->GetOperandAs(base_index); const auto base = _.FindDef(base_id); const auto base_type = _.FindDef(base->type_id()); if (!base_type || SpvOpTypePointer != base_type->opcode()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "The Base '" << _.getIdName(base_id) << "' in " << instr_name << " instruction must be a pointer."; } @@ -435,7 +802,7 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, auto result_type_storage_class = result_type->word(2); auto base_type_storage_class = base_type->word(2); if (result_type_storage_class != base_type_storage_class) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "The result pointer storage class and base " "pointer storage class in " << instr_name << " do not match."; @@ -447,9 +814,9 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, // Check Universal Limit (SPIR-V Spec. Section 2.17). // The number of indexes passed to OpAccessChain may not exceed 255 // The instruction includes 4 words + N words (for N indexes) - size_t num_indexes = inst.words().size() - 4; - if (inst.opcode() == SpvOpPtrAccessChain || - inst.opcode() == SpvOpInBoundsPtrAccessChain) { + size_t num_indexes = inst->words().size() - 4; + if (inst->opcode() == SpvOpPtrAccessChain || + inst->opcode() == SpvOpInBoundsPtrAccessChain) { // In pointer access chains, the element operand is required, but not // counted as an index. --num_indexes; @@ -457,7 +824,7 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, const size_t num_indexes_limit = _.options()->universal_limits_.max_access_chain_indexes; if (num_indexes > num_indexes_limit) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "The number of indexes in " << instr_name << " may not exceed " << num_indexes_limit << ". Found " << num_indexes << " indexes."; } @@ -469,18 +836,18 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, // on. Once any non-composite type is reached, there must be no remaining // (unused) indexes. auto starting_index = 4; - if (inst.opcode() == SpvOpPtrAccessChain || - inst.opcode() == SpvOpInBoundsPtrAccessChain) { + if (inst->opcode() == SpvOpPtrAccessChain || + inst->opcode() == SpvOpInBoundsPtrAccessChain) { ++starting_index; } - for (size_t i = starting_index; i < inst.words().size(); ++i) { - const uint32_t cur_word = inst.words()[i]; + for (size_t i = starting_index; i < inst->words().size(); ++i) { + const uint32_t cur_word = inst->words()[i]; // Earlier ID checks ensure that cur_word definition exists. auto cur_word_instr = _.FindDef(cur_word); // The index must be a scalar integer type (See OpAccessChain in the Spec.) auto index_type = _.FindDef(cur_word_instr->type_id()); if (!index_type || SpvOpTypeInt != index_type->opcode()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << "Indexes passed to " << instr_name << " must be of type integer."; } @@ -539,7 +906,7 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, // At this point, we have fully walked down from the base using the indeces. // The type being pointed to should be the same as the result type. if (type_pointee->id() != result_type_pointee->id()) { - return _.diag(SPV_ERROR_INVALID_ID, &inst) + return _.diag(SPV_ERROR_INVALID_ID, inst) << instr_name << " result type (Op" << spvOpcodeString(static_cast(result_type_pointee->opcode())) << ") does not match the type that results from indexing into the " @@ -552,32 +919,103 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, return SPV_SUCCESS; } +spv_result_t ValidatePtrAccessChain(ValidationState_t& _, + const Instruction* inst) { + if (_.addressing_model() == SpvAddressingModelLogical) { + if (!_.features().variable_pointers && + !_.features().variable_pointers_storage_buffer) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Generating variable pointers requires capability " + << "VariablePointers or VariablePointersStorageBuffer"; + } + } + return ValidateAccessChain(_, inst); +} + +spv_result_t ValidateArrayLength(ValidationState_t& state, + const Instruction* inst) { + std::string instr_name = + "Op" + std::string(spvOpcodeString(static_cast(inst->opcode()))); + + // Result type must be a 32-bit unsigned int. + auto result_type = state.FindDef(inst->type_id()); + if (result_type->opcode() != SpvOpTypeInt || + result_type->GetOperandAs(1) != 32 || + result_type->GetOperandAs(2) != 0) { + return state.diag(SPV_ERROR_INVALID_ID, inst) + << "The Result Type of " << instr_name << " '" + << state.getIdName(inst->id()) + << "' must be OpTypeInt with width 32 and signedness 0."; + } + + // The structure that is passed in must be an pointer to a structure, whose + // last element is a runtime array. + auto pointer = state.FindDef(inst->GetOperandAs(2)); + auto pointer_type = state.FindDef(pointer->type_id()); + if (pointer_type->opcode() != SpvOpTypePointer) { + return state.diag(SPV_ERROR_INVALID_ID, inst) + << "The Struture's type in " << instr_name << " '" + << state.getIdName(inst->id()) + << "' must be a pointer to an OpTypeStruct."; + } + + auto structure_type = state.FindDef(pointer_type->GetOperandAs(2)); + if (structure_type->opcode() != SpvOpTypeStruct) { + return state.diag(SPV_ERROR_INVALID_ID, inst) + << "The Struture's type in " << instr_name << " '" + << state.getIdName(inst->id()) + << "' must be a pointer to an OpTypeStruct."; + } + + auto num_of_members = structure_type->operands().size() - 1; + auto last_member = + state.FindDef(structure_type->GetOperandAs(num_of_members)); + if (last_member->opcode() != SpvOpTypeRuntimeArray) { + return state.diag(SPV_ERROR_INVALID_ID, inst) + << "The Struture's last member in " << instr_name << " '" + << state.getIdName(inst->id()) << "' must be an OpTypeRuntimeArray."; + } + + // The array member must the the index of the last element (the run time + // array). + if (inst->GetOperandAs(3) != num_of_members - 1) { + return state.diag(SPV_ERROR_INVALID_ID, inst) + << "The array member in " << instr_name << " '" + << state.getIdName(inst->id()) + << "' must be an the last member of the struct."; + } + return SPV_SUCCESS; +} + } // namespace -spv_result_t ValidateMemoryInstructions(ValidationState_t& _, - const Instruction* inst) { +spv_result_t MemoryPass(ValidationState_t& _, const Instruction* inst) { switch (inst->opcode()) { case SpvOpVariable: - if (auto error = ValidateVariable(_, *inst)) return error; + if (auto error = ValidateVariable(_, inst)) return error; break; case SpvOpLoad: - if (auto error = ValidateLoad(_, *inst)) return error; + if (auto error = ValidateLoad(_, inst)) return error; break; case SpvOpStore: - if (auto error = ValidateStore(_, *inst)) return error; + if (auto error = ValidateStore(_, inst)) return error; break; case SpvOpCopyMemory: case SpvOpCopyMemorySized: - if (auto error = ValidateCopyMemory(_, *inst)) return error; + if (auto error = ValidateCopyMemory(_, inst)) return error; + break; + case SpvOpPtrAccessChain: + if (auto error = ValidatePtrAccessChain(_, inst)) return error; break; case SpvOpAccessChain: case SpvOpInBoundsAccessChain: - case SpvOpPtrAccessChain: case SpvOpInBoundsPtrAccessChain: - if (auto error = ValidateAccessChain(_, *inst)) return error; + if (auto error = ValidateAccessChain(_, inst)) return error; + break; + case SpvOpArrayLength: + if (auto error = ValidateArrayLength(_, inst)) return error; break; case SpvOpImageTexelPointer: - case SpvOpArrayLength: case SpvOpGenericPtrMemSemantics: default: break; @@ -585,6 +1023,5 @@ spv_result_t ValidateMemoryInstructions(ValidationState_t& _, return SPV_SUCCESS; } - } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp b/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp new file mode 100644 index 000000000..f90b5e4cd --- /dev/null +++ b/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp @@ -0,0 +1,241 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/val/validate_memory_semantics.h" + +#include "source/diagnostic.h" +#include "source/spirv_target_env.h" +#include "source/util/bitutils.h" +#include "source/val/instruction.h" +#include "source/val/validation_state.h" + +namespace spvtools { +namespace val { + +spv_result_t ValidateMemorySemantics(ValidationState_t& _, + const Instruction* inst, + uint32_t operand_index) { + const SpvOp opcode = inst->opcode(); + const auto id = inst->GetOperandAs(operand_index); + bool is_int32 = false, is_const_int32 = false; + uint32_t value = 0; + std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(id); + + if (!is_int32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Memory Semantics to be a 32-bit int"; + } + + if (!is_const_int32) { + if (_.HasCapability(SpvCapabilityShader)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Memory Semantics ids must be OpConstant when Shader " + "capability is present"; + } + return SPV_SUCCESS; + } + + if (spvIsWebGPUEnv(_.context()->target_env)) { + uint32_t valid_bits = SpvMemorySemanticsAcquireMask | + SpvMemorySemanticsReleaseMask | + SpvMemorySemanticsAcquireReleaseMask | + SpvMemorySemanticsUniformMemoryMask | + SpvMemorySemanticsWorkgroupMemoryMask | + SpvMemorySemanticsImageMemoryMask | + SpvMemorySemanticsOutputMemoryKHRMask | + SpvMemorySemanticsMakeAvailableKHRMask | + SpvMemorySemanticsMakeVisibleKHRMask; + if (value & ~valid_bits) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "WebGPU spec disallows any bit masks in Memory Semantics that " + "are not Acquire, Release, AcquireRelease, UniformMemory, " + "WorkgroupMemory, ImageMemory, OutputMemoryKHR, " + "MakeAvailableKHR, or MakeVisibleKHR"; + } + } + + const size_t num_memory_order_set_bits = spvtools::utils::CountSetBits( + value & (SpvMemorySemanticsAcquireMask | SpvMemorySemanticsReleaseMask | + SpvMemorySemanticsAcquireReleaseMask | + SpvMemorySemanticsSequentiallyConsistentMask)); + + if (num_memory_order_set_bits > 1) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Semantics can have at most one of the following " + "bits " + "set: Acquire, Release, AcquireRelease or " + "SequentiallyConsistent"; + } + + if (_.memory_model() == SpvMemoryModelVulkanKHR && + value & SpvMemorySemanticsSequentiallyConsistentMask) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "SequentiallyConsistent memory " + "semantics cannot be used with " + "the VulkanKHR memory model."; + } + + if (value & SpvMemorySemanticsMakeAvailableKHRMask && + !_.HasCapability(SpvCapabilityVulkanMemoryModelKHR)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Semantics MakeAvailableKHR requires capability " + << "VulkanMemoryModelKHR"; + } + + if (value & SpvMemorySemanticsMakeVisibleKHRMask && + !_.HasCapability(SpvCapabilityVulkanMemoryModelKHR)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Semantics MakeVisibleKHR requires capability " + << "VulkanMemoryModelKHR"; + } + + if (value & SpvMemorySemanticsOutputMemoryKHRMask && + !_.HasCapability(SpvCapabilityVulkanMemoryModelKHR)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Semantics OutputMemoryKHR requires capability " + << "VulkanMemoryModelKHR"; + } + + if (value & SpvMemorySemanticsUniformMemoryMask && + !_.HasCapability(SpvCapabilityShader)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Semantics UniformMemory requires capability Shader"; + } + + // Checking for SpvCapabilityAtomicStorage is intentionally not done here. See + // https://github.com/KhronosGroup/glslang/issues/1618 for the reasoning why. + + if (value & (SpvMemorySemanticsMakeAvailableKHRMask | + SpvMemorySemanticsMakeVisibleKHRMask)) { + const bool includes_storage_class = + value & (SpvMemorySemanticsUniformMemoryMask | + SpvMemorySemanticsSubgroupMemoryMask | + SpvMemorySemanticsWorkgroupMemoryMask | + SpvMemorySemanticsCrossWorkgroupMemoryMask | + SpvMemorySemanticsAtomicCounterMemoryMask | + SpvMemorySemanticsImageMemoryMask | + SpvMemorySemanticsOutputMemoryKHRMask); + + if (!includes_storage_class) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Memory Semantics to include a storage class"; + } + } + + if (value & SpvMemorySemanticsMakeVisibleKHRMask && + !(value & (SpvMemorySemanticsAcquireMask | + SpvMemorySemanticsAcquireReleaseMask))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": MakeVisibleKHR Memory Semantics also requires either Acquire " + "or AcquireRelease Memory Semantics"; + } + + if (value & SpvMemorySemanticsMakeAvailableKHRMask && + !(value & (SpvMemorySemanticsReleaseMask | + SpvMemorySemanticsAcquireReleaseMask))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": MakeAvailableKHR Memory Semantics also requires either " + "Release or AcquireRelease Memory Semantics"; + } + + if (spvIsVulkanEnv(_.context()->target_env)) { + const bool includes_storage_class = + value & (SpvMemorySemanticsUniformMemoryMask | + SpvMemorySemanticsWorkgroupMemoryMask | + SpvMemorySemanticsImageMemoryMask | + SpvMemorySemanticsOutputMemoryKHRMask); + + if (opcode == SpvOpMemoryBarrier && !num_memory_order_set_bits) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Vulkan specification requires Memory Semantics to have " + "one " + "of the following bits set: Acquire, Release, " + "AcquireRelease " + "or SequentiallyConsistent"; + } + + if (opcode == SpvOpMemoryBarrier && !includes_storage_class) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Memory Semantics to include a Vulkan-supported " + "storage class"; + } + +#if 0 + // TODO(atgoo@github.com): this check fails Vulkan CTS, reenable once fixed. + if (opcode == SpvOpControlBarrier && value && !includes_storage_class) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Memory Semantics to include a Vulkan-supported " + "storage class if Memory Semantics is not None"; + } +#endif + } + + if (opcode == SpvOpAtomicFlagClear && + (value & SpvMemorySemanticsAcquireMask || + value & SpvMemorySemanticsAcquireReleaseMask)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Memory Semantics Acquire and AcquireRelease cannot be used " + "with " + << spvOpcodeString(opcode); + } + + if (opcode == SpvOpAtomicCompareExchange && operand_index == 5 && + (value & SpvMemorySemanticsReleaseMask || + value & SpvMemorySemanticsAcquireReleaseMask)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Semantics Release and AcquireRelease cannot be " + "used " + "for operand Unequal"; + } + + if (spvIsVulkanEnv(_.context()->target_env)) { + if (opcode == SpvOpAtomicLoad && + (value & SpvMemorySemanticsReleaseMask || + value & SpvMemorySemanticsAcquireReleaseMask || + value & SpvMemorySemanticsSequentiallyConsistentMask)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Vulkan spec disallows OpAtomicLoad with Memory Semantics " + "Release, AcquireRelease and SequentiallyConsistent"; + } + + if (opcode == SpvOpAtomicStore && + (value & SpvMemorySemanticsAcquireMask || + value & SpvMemorySemanticsAcquireReleaseMask || + value & SpvMemorySemanticsSequentiallyConsistentMask)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Vulkan spec disallows OpAtomicStore with Memory Semantics " + "Acquire, AcquireRelease and SequentiallyConsistent"; + } + } + + // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. + + return SPV_SUCCESS; +} + +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/validate_memory_semantics.h b/3rdparty/spirv-tools/source/val/validate_memory_semantics.h new file mode 100644 index 000000000..72a3e1004 --- /dev/null +++ b/3rdparty/spirv-tools/source/val/validate_memory_semantics.h @@ -0,0 +1,28 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Validates correctness of memory semantics for SPIR-V instructions. + +#include "source/opcode.h" +#include "source/val/validate.h" + +namespace spvtools { +namespace val { + +spv_result_t ValidateMemorySemantics(ValidationState_t& _, + const Instruction* inst, + uint32_t operand_index); + +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp b/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp index 60e7c0a1d..c1bfc2740 100644 --- a/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp +++ b/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp @@ -17,6 +17,7 @@ #include #include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" #include "source/val/validation_state.h" @@ -53,6 +54,171 @@ spv_result_t ValidateEntryPoint(ValidationState_t& _, const Instruction* inst) { << "OpEntryPoint Entry Point '" << _.getIdName(entry_point_id) << "'s function return type is not void."; } + + const auto* execution_modes = _.GetExecutionModes(entry_point_id); + if (_.HasCapability(SpvCapabilityShader)) { + switch (execution_model) { + case SpvExecutionModelFragment: + if (execution_modes && + execution_modes->count(SpvExecutionModeOriginUpperLeft) && + execution_modes->count(SpvExecutionModeOriginLowerLeft)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Fragment execution model entry points can only specify " + "one of OriginUpperLeft or OriginLowerLeft execution " + "modes."; + } + if (!execution_modes || + (!execution_modes->count(SpvExecutionModeOriginUpperLeft) && + !execution_modes->count(SpvExecutionModeOriginLowerLeft))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Fragment execution model entry points require either an " + "OriginUpperLeft or OriginLowerLeft execution mode."; + } + if (execution_modes && + 1 < std::count_if(execution_modes->begin(), execution_modes->end(), + [](const SpvExecutionMode& mode) { + switch (mode) { + case SpvExecutionModeDepthGreater: + case SpvExecutionModeDepthLess: + case SpvExecutionModeDepthUnchanged: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Fragment execution model entry points can specify at most " + "one of DepthGreater, DepthLess or DepthUnchanged " + "execution modes."; + } + break; + case SpvExecutionModelTessellationControl: + case SpvExecutionModelTessellationEvaluation: + if (execution_modes && + 1 < std::count_if(execution_modes->begin(), execution_modes->end(), + [](const SpvExecutionMode& mode) { + switch (mode) { + case SpvExecutionModeSpacingEqual: + case SpvExecutionModeSpacingFractionalEven: + case SpvExecutionModeSpacingFractionalOdd: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Tessellation execution model entry points can specify at " + "most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes."; + } + if (execution_modes && + 1 < std::count_if(execution_modes->begin(), execution_modes->end(), + [](const SpvExecutionMode& mode) { + switch (mode) { + case SpvExecutionModeTriangles: + case SpvExecutionModeQuads: + case SpvExecutionModeIsolines: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Tessellation execution model entry points can specify at " + "most one of Triangles, Quads or Isolines execution modes."; + } + if (execution_modes && + 1 < std::count_if(execution_modes->begin(), execution_modes->end(), + [](const SpvExecutionMode& mode) { + switch (mode) { + case SpvExecutionModeVertexOrderCw: + case SpvExecutionModeVertexOrderCcw: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Tessellation execution model entry points can specify at " + "most one of VertexOrderCw or VertexOrderCcw execution " + "modes."; + } + break; + case SpvExecutionModelGeometry: + if (!execution_modes || + 1 != std::count_if(execution_modes->begin(), execution_modes->end(), + [](const SpvExecutionMode& mode) { + switch (mode) { + case SpvExecutionModeInputPoints: + case SpvExecutionModeInputLines: + case SpvExecutionModeInputLinesAdjacency: + case SpvExecutionModeTriangles: + case SpvExecutionModeInputTrianglesAdjacency: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Geometry execution model entry points must specify " + "exactly one of InputPoints, InputLines, " + "InputLinesAdjacency, Triangles or InputTrianglesAdjacency " + "execution modes."; + } + if (!execution_modes || + 1 != std::count_if(execution_modes->begin(), execution_modes->end(), + [](const SpvExecutionMode& mode) { + switch (mode) { + case SpvExecutionModeOutputPoints: + case SpvExecutionModeOutputLineStrip: + case SpvExecutionModeOutputTriangleStrip: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Geometry execution model entry points must specify " + "exactly one of OutputPoints, OutputLineStrip or " + "OutputTriangleStrip execution modes."; + } + break; + default: + break; + } + } + + if (spvIsVulkanEnv(_.context()->target_env)) { + switch (execution_model) { + case SpvExecutionModelGLCompute: + if (!execution_modes || + !execution_modes->count(SpvExecutionModeLocalSize)) { + bool ok = false; + for (auto& i : _.ordered_instructions()) { + if (i.opcode() == SpvOpDecorate) { + if (i.operands().size() > 2) { + if (i.GetOperandAs(1) == SpvDecorationBuiltIn && + i.GetOperandAs(2) == SpvBuiltInWorkgroupSize) { + ok = true; + break; + } + } + } + } + if (!ok) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "In the Vulkan environment, GLCompute execution model " + "entry points require either the LocalSize execution " + "mode or an object decorated with WorkgroupSize must be " + "specified."; + } + } + break; + default: + break; + } + } + return SPV_SUCCESS; } @@ -68,6 +234,183 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, << "' is not the Entry Point " "operand of an OpEntryPoint."; } + + const auto mode = inst->GetOperandAs(1); + const auto* models = _.GetExecutionModels(entry_point_id); + switch (mode) { + case SpvExecutionModeInvocations: + case SpvExecutionModeInputPoints: + case SpvExecutionModeInputLines: + case SpvExecutionModeInputLinesAdjacency: + case SpvExecutionModeInputTrianglesAdjacency: + case SpvExecutionModeOutputLineStrip: + case SpvExecutionModeOutputTriangleStrip: + if (!std::all_of(models->begin(), models->end(), + [](const SpvExecutionModel& model) { + return model == SpvExecutionModelGeometry; + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with the Geometry execution " + "model."; + } + break; + case SpvExecutionModeOutputPoints: + if (!std::all_of(models->begin(), models->end(), + [&_](const SpvExecutionModel& model) { + switch (model) { + case SpvExecutionModelGeometry: + return true; + case SpvExecutionModelMeshNV: + return _.HasCapability(SpvCapabilityMeshShadingNV); + default: + return false; + } + })) { + if (_.HasCapability(SpvCapabilityMeshShadingNV)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with the Geometry or " + "MeshNV execution model."; + } else { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with the Geometry " + "execution " + "model."; + } + } + break; + case SpvExecutionModeSpacingEqual: + case SpvExecutionModeSpacingFractionalEven: + case SpvExecutionModeSpacingFractionalOdd: + case SpvExecutionModeVertexOrderCw: + case SpvExecutionModeVertexOrderCcw: + case SpvExecutionModePointMode: + case SpvExecutionModeQuads: + case SpvExecutionModeIsolines: + if (!std::all_of( + models->begin(), models->end(), + [](const SpvExecutionModel& model) { + return (model == SpvExecutionModelTessellationControl) || + (model == SpvExecutionModelTessellationEvaluation); + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with a tessellation " + "execution model."; + } + break; + case SpvExecutionModeTriangles: + if (!std::all_of(models->begin(), models->end(), + [](const SpvExecutionModel& model) { + switch (model) { + case SpvExecutionModelGeometry: + case SpvExecutionModelTessellationControl: + case SpvExecutionModelTessellationEvaluation: + return true; + default: + return false; + } + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with a Geometry or " + "tessellation execution model."; + } + break; + case SpvExecutionModeOutputVertices: + if (!std::all_of(models->begin(), models->end(), + [&_](const SpvExecutionModel& model) { + switch (model) { + case SpvExecutionModelGeometry: + case SpvExecutionModelTessellationControl: + case SpvExecutionModelTessellationEvaluation: + return true; + case SpvExecutionModelMeshNV: + return _.HasCapability(SpvCapabilityMeshShadingNV); + default: + return false; + } + })) { + if (_.HasCapability(SpvCapabilityMeshShadingNV)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with a Geometry, " + "tessellation or MeshNV execution model."; + } else { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with a Geometry or " + "tessellation execution model."; + } + } + break; + case SpvExecutionModePixelCenterInteger: + case SpvExecutionModeOriginUpperLeft: + case SpvExecutionModeOriginLowerLeft: + case SpvExecutionModeEarlyFragmentTests: + case SpvExecutionModeDepthReplacing: + case SpvExecutionModeDepthLess: + case SpvExecutionModeDepthUnchanged: + if (!std::all_of(models->begin(), models->end(), + [](const SpvExecutionModel& model) { + return model == SpvExecutionModelFragment; + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with the Fragment execution " + "model."; + } + break; + case SpvExecutionModeLocalSizeHint: + case SpvExecutionModeVecTypeHint: + case SpvExecutionModeContractionOff: + case SpvExecutionModeLocalSizeHintId: + if (!std::all_of(models->begin(), models->end(), + [](const SpvExecutionModel& model) { + return model == SpvExecutionModelKernel; + })) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with the Kernel execution " + "model."; + } + break; + case SpvExecutionModeLocalSize: + case SpvExecutionModeLocalSizeId: + if (!std::all_of(models->begin(), models->end(), + [&_](const SpvExecutionModel& model) { + switch (model) { + case SpvExecutionModelKernel: + case SpvExecutionModelGLCompute: + return true; + case SpvExecutionModelTaskNV: + case SpvExecutionModelMeshNV: + return _.HasCapability(SpvCapabilityMeshShadingNV); + default: + return false; + } + })) { + if (_.HasCapability(SpvCapabilityMeshShadingNV)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with a Kernel, GLCompute, " + "MeshNV, or TaskNV execution model."; + } else { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Execution mode can only be used with a Kernel or " + "GLCompute " + "execution model."; + } + } + default: + break; + } + + if (spvIsVulkanEnv(_.context()->target_env)) { + if (mode == SpvExecutionModeOriginLowerLeft) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "In the Vulkan environment, the OriginLowerLeft execution mode " + "must not be used."; + } + if (mode == SpvExecutionModePixelCenterInteger) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "In the Vulkan environment, the PixelCenterInteger execution " + "mode must not be used."; + } + } + return SPV_SUCCESS; } @@ -79,6 +422,7 @@ spv_result_t ModeSettingPass(ValidationState_t& _, const Instruction* inst) { if (auto error = ValidateEntryPoint(_, inst)) return error; break; case SpvOpExecutionMode: + case SpvOpExecutionModeId: if (auto error = ValidateExecutionMode(_, inst)) return error; break; default: diff --git a/3rdparty/spirv-tools/source/val/validate_non_uniform.cpp b/3rdparty/spirv-tools/source/val/validate_non_uniform.cpp index 89e82c616..8dcf9743f 100644 --- a/3rdparty/spirv-tools/source/val/validate_non_uniform.cpp +++ b/3rdparty/spirv-tools/source/val/validate_non_uniform.cpp @@ -22,44 +22,31 @@ #include "source/spirv_target_env.h" #include "source/util/bitutils.h" #include "source/val/instruction.h" +#include "source/val/validate_scopes.h" #include "source/val/validation_state.h" namespace spvtools { namespace val { namespace { -spv_result_t ValidateExecutionScope(ValidationState_t& _, - const Instruction* inst, uint32_t scope) { - SpvOp opcode = inst->opcode(); - bool is_int32 = false, is_const_int32 = false; - uint32_t value = 0; - std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(scope); +spv_result_t ValidateGroupNonUniformBallotBitCount(ValidationState_t& _, + const Instruction* inst) { + // Scope is already checked by ValidateExecutionScope() above. - if (!is_int32) { + const uint32_t result_type = inst->type_id(); + if (!_.IsUnsignedIntScalarType(result_type)) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": expected Execution Scope to be a 32-bit int"; + << "Expected Result Type to be an unsigned integer type scalar."; } - if (!is_const_int32) { - return SPV_SUCCESS; + const auto value = inst->GetOperandAs(4); + const auto value_type = _.FindDef(value)->type_id(); + if (!_.IsUnsignedIntVectorType(value_type) || + _.GetDimension(value_type) != 4) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected Value to be a " + "vector of four components " + "of integer type scalar"; } - - if (spvIsVulkanEnv(_.context()->target_env) && - _.context()->target_env != SPV_ENV_VULKAN_1_0 && - value != SpvScopeSubgroup) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": in Vulkan environment Execution scope is limited to " - "Subgroup"; - } - - if (value != SpvScopeSubgroup && value != SpvScopeWorkgroup) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << spvOpcodeString(opcode) - << ": Execution scope is limited to Subgroup or Workgroup"; - } - return SPV_SUCCESS; } @@ -76,6 +63,13 @@ spv_result_t NonUniformPass(ValidationState_t& _, const Instruction* inst) { } } + switch (opcode) { + case SpvOpGroupNonUniformBallotBitCount: + return ValidateGroupNonUniformBallotBitCount(_, inst); + default: + break; + } + return SPV_SUCCESS; } diff --git a/3rdparty/spirv-tools/source/val/validate_scopes.cpp b/3rdparty/spirv-tools/source/val/validate_scopes.cpp new file mode 100644 index 000000000..3ba8f3bf9 --- /dev/null +++ b/3rdparty/spirv-tools/source/val/validate_scopes.cpp @@ -0,0 +1,195 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/val/validate_scopes.h" + +#include "source/diagnostic.h" +#include "source/spirv_target_env.h" +#include "source/val/instruction.h" +#include "source/val/validation_state.h" + +namespace spvtools { +namespace val { + +spv_result_t ValidateExecutionScope(ValidationState_t& _, + const Instruction* inst, uint32_t scope) { + SpvOp opcode = inst->opcode(); + bool is_int32 = false, is_const_int32 = false; + uint32_t value = 0; + std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(scope); + + if (!is_int32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Execution Scope to be a 32-bit int"; + } + + if (!is_const_int32) { + if (_.HasCapability(SpvCapabilityShader)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Scope ids must be " + "OpConstant when Shader " + "capability is present"; + } + return SPV_SUCCESS; + } + + // Vulkan specific rules + if (spvIsVulkanEnv(_.context()->target_env)) { + // Vulkan 1.1 specific rules + if (_.context()->target_env != SPV_ENV_VULKAN_1_0) { + // Scope for Non Uniform Group Operations must be limited to Subgroup + if (spvOpcodeIsNonUniformGroupOperation(opcode) && + value != SpvScopeSubgroup) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": in Vulkan environment Execution scope is limited to " + "Subgroup"; + } + } + + // If OpControlBarrier is used in fragment, vertex, tessellation evaluation, + // or geometry stages, the execution Scope must be Subgroup. + if (opcode == SpvOpControlBarrier && value != SpvScopeSubgroup) { + _.function(inst->function()->id()) + ->RegisterExecutionModelLimitation([](SpvExecutionModel model, + std::string* message) { + if (model == SpvExecutionModelFragment || + model == SpvExecutionModelVertex || + model == SpvExecutionModelGeometry || + model == SpvExecutionModelTessellationEvaluation) { + if (message) { + *message = + "in Vulkan evironment, OpControlBarrier execution scope " + "must be Subgroup for Fragment, Vertex, Geometry and " + "TessellationEvaluation execution models"; + } + return false; + } + return true; + }); + } + + // Vulkan generic rules + // Scope for execution must be limited to Workgroup or Subgroup + if (value != SpvScopeWorkgroup && value != SpvScopeSubgroup) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": in Vulkan environment Execution Scope is limited to " + "Workgroup and Subgroup"; + } + } + + // WebGPU Specific rules + if (spvIsWebGPUEnv(_.context()->target_env)) { + // Scope for execution must be limited to Workgroup or Subgroup + if (value != SpvScopeWorkgroup && value != SpvScopeSubgroup) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": in WebGPU environment Execution Scope is limited to " + "Workgroup and Subgroup"; + } + } + + // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. + + // General SPIRV rules + // Scope for execution must be limited to Workgroup or Subgroup for + // non-uniform operations + if (spvOpcodeIsNonUniformGroupOperation(opcode) && + value != SpvScopeSubgroup && value != SpvScopeWorkgroup) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Execution scope is limited to Subgroup or Workgroup"; + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateMemoryScope(ValidationState_t& _, const Instruction* inst, + uint32_t scope) { + const SpvOp opcode = inst->opcode(); + bool is_int32 = false, is_const_int32 = false; + uint32_t value = 0; + std::tie(is_int32, is_const_int32, value) = _.EvalInt32IfConst(scope); + + if (!is_int32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": expected Memory Scope to be a 32-bit int"; + } + + if (!is_const_int32) { + if (_.HasCapability(SpvCapabilityShader)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Scope ids must be " + "OpConstant when Shader " + "capability is present"; + } + return SPV_SUCCESS; + } + + if (value == SpvScopeQueueFamilyKHR) { + if (_.HasCapability(SpvCapabilityVulkanMemoryModelKHR)) { + return SPV_SUCCESS; + } else { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": Memory Scope QueueFamilyKHR requires capability " + "VulkanMemoryModelKHR"; + } + } + + if (value == SpvScopeDevice && + _.HasCapability(SpvCapabilityVulkanMemoryModelKHR) && + !_.HasCapability(SpvCapabilityVulkanMemoryModelDeviceScopeKHR)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability"; + } + + // Vulkan Specific rules + if (spvIsVulkanEnv(_.context()->target_env)) { + if (value == SpvScopeCrossDevice) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": in Vulkan environment, Memory Scope cannot be CrossDevice"; + } + // Vulkan 1.0 specifc rules + if (_.context()->target_env == SPV_ENV_VULKAN_1_0 && + value != SpvScopeDevice && value != SpvScopeWorkgroup && + value != SpvScopeInvocation) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": in Vulkan 1.0 environment Memory Scope is limited to " + "Device, " + "Workgroup and Invocation"; + } + // Vulkan 1.1 specifc rules + if (_.context()->target_env == SPV_ENV_VULKAN_1_1 && + value != SpvScopeDevice && value != SpvScopeWorkgroup && + value != SpvScopeSubgroup && value != SpvScopeInvocation) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << ": in Vulkan 1.1 environment Memory Scope is limited to " + "Device, " + "Workgroup and Invocation"; + } + } + + // TODO(atgoo@github.com) Add checks for OpenCL and OpenGL environments. + + return SPV_SUCCESS; +} + +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/validate_scopes.h b/3rdparty/spirv-tools/source/val/validate_scopes.h new file mode 100644 index 000000000..311ca7ff2 --- /dev/null +++ b/3rdparty/spirv-tools/source/val/validate_scopes.h @@ -0,0 +1,30 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Validates correctness of scopes for SPIR-V instructions. + +#include "source/opcode.h" +#include "source/val/validate.h" + +namespace spvtools { +namespace val { + +spv_result_t ValidateExecutionScope(ValidationState_t& _, + const Instruction* inst, uint32_t scope); + +spv_result_t ValidateMemoryScope(ValidationState_t& _, const Instruction* inst, + uint32_t scope); + +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/source/val/validate_type.cpp b/3rdparty/spirv-tools/source/val/validate_type.cpp index b6942272e..e0f278636 100644 --- a/3rdparty/spirv-tools/source/val/validate_type.cpp +++ b/3rdparty/spirv-tools/source/val/validate_type.cpp @@ -99,6 +99,13 @@ spv_result_t ValidateTypeArray(ValidationState_t& _, const Instruction* inst) { << "OpTypeArray Element Type '" << _.getIdName(element_type_id) << "' is not a type."; } + + if (element_type->opcode() == SpvOpTypeVoid) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeArray Element Type '" << _.getIdName(element_type_id) + << "' is a void type."; + } + const auto length_index = 2; const auto length_id = inst->GetOperandAs(length_index); const auto length = _.FindDef(length_id); @@ -147,6 +154,13 @@ spv_result_t ValidateTypeRuntimeArray(ValidationState_t& _, << "OpTypeRuntimeArray Element Type '" << _.getIdName(element_id) << "' is not a type."; } + + if (element_type->opcode() == SpvOpTypeVoid) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeRuntimeArray Element Type '" + << _.getIdName(element_id) << "' is a void type."; + } + return SPV_SUCCESS; } @@ -177,11 +191,6 @@ spv_result_t ValidateTypeStruct(ValidationState_t& _, const Instruction* inst) { << _.getIdName(member_type_id) << "."; } if (_.IsForwardPointer(member_type_id)) { - if (member_type->opcode() != SpvOpTypePointer) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "Found a forward reference to a non-pointer " - "type in OpTypeStruct instruction."; - } // If we're dealing with a forward pointer: // Find out the type that the pointer is pointing to (must be struct) // word 3 is the of the type being pointed to. @@ -252,6 +261,12 @@ spv_result_t ValidateTypeFunction(ValidationState_t& _, << "OpTypeFunction Parameter Type '" << _.getIdName(param_id) << "' is not a type."; } + + if (param_type->opcode() == SpvOpTypeVoid) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeFunction Parameter Type '" << _.getIdName(param_id) + << "' cannot be OpTypeVoid."; + } } const uint32_t num_function_args_limit = _.options()->universal_limits_.max_function_args; @@ -276,10 +291,32 @@ spv_result_t ValidateTypeFunction(ValidationState_t& _, return SPV_SUCCESS; } +spv_result_t ValidateTypeForwardPointer(ValidationState_t& _, + const Instruction* inst) { + const auto pointer_type_id = inst->GetOperandAs(0); + const auto pointer_type_inst = _.FindDef(pointer_type_id); + if (pointer_type_inst->opcode() != SpvOpTypePointer) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Pointer type in OpTypeForwardPointer is not a pointer type."; + } + + if (inst->GetOperandAs(1) != + pointer_type_inst->GetOperandAs(1)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Storage class in OpTypeForwardPointer does not match the " + "pointer definition."; + } + + return SPV_SUCCESS; +} + } // namespace spv_result_t TypePass(ValidationState_t& _, const Instruction* inst) { - if (!spvOpcodeGeneratesType(inst->opcode())) return SPV_SUCCESS; + if (!spvOpcodeGeneratesType(inst->opcode()) && + inst->opcode() != SpvOpTypeForwardPointer) { + return SPV_SUCCESS; + } if (auto error = ValidateUniqueness(_, inst)) return error; @@ -305,6 +342,9 @@ spv_result_t TypePass(ValidationState_t& _, const Instruction* inst) { case SpvOpTypeFunction: if (auto error = ValidateTypeFunction(_, inst)) return error; break; + case SpvOpTypeForwardPointer: + if (auto error = ValidateTypeForwardPointer(_, inst)) return error; + break; default: break; } diff --git a/3rdparty/spirv-tools/source/val/validation_state.cpp b/3rdparty/spirv-tools/source/val/validation_state.cpp index dec25b1c3..a10186fb5 100644 --- a/3rdparty/spirv-tools/source/val/validation_state.cpp +++ b/3rdparty/spirv-tools/source/val/validation_state.cpp @@ -151,7 +151,8 @@ spv_result_t CountInstructions(void* user_data, ValidationState_t::ValidationState_t(const spv_const_context ctx, const spv_const_validator_options opt, const uint32_t* words, - const size_t num_words) + const size_t num_words, + const uint32_t max_warnings) : context_(ctx), options_(opt), words_(words), @@ -170,7 +171,9 @@ ValidationState_t::ValidationState_t(const spv_const_context ctx, grammar_(ctx), addressing_model_(SpvAddressingModelMax), memory_model_(SpvMemoryModelMax), - in_function_(false) { + in_function_(false), + num_of_warnings_(0), + max_num_of_warnings_(max_warnings) { assert(opt && "Validator options may not be Null."); const auto env = context_->target_env; @@ -194,11 +197,21 @@ ValidationState_t::ValidationState_t(const spv_const_context ctx, // fail and generate an error. if (num_words > 0) { // Count the number of instructions in the binary. - spvBinaryParse(ctx, this, words, num_words, + // This parse should not produce any error messages. Hijack the context and + // replace the message consumer so that we do not pollute any state in input + // consumer. + spv_context_t hijacked_context = *ctx; + hijacked_context.consumer = [](spv_message_level_t, const char*, + const spv_position_t&, const char*) {}; + spvBinaryParse(&hijacked_context, this, words, num_words, /* parsed_header = */ nullptr, CountInstructions, /* diagnostic = */ nullptr); preallocateStorage(); } + + friendly_mapper_ = spvtools::MakeUnique( + context_, words_, num_words_); + name_mapper_ = friendly_mapper_->GetNameMapper(); } void ValidationState_t::preallocateStorage() { @@ -230,21 +243,10 @@ void ValidationState_t::AssignNameToId(uint32_t id, std::string name) { } std::string ValidationState_t::getIdName(uint32_t id) const { - std::stringstream out; - out << id; - if (operand_names_.find(id) != end(operand_names_)) { - out << "[" << operand_names_.at(id) << "]"; - } - return out.str(); -} + const std::string id_name = name_mapper_(id); -std::string ValidationState_t::getIdOrName(uint32_t id) const { std::stringstream out; - if (operand_names_.find(id) != std::end(operand_names_)) { - out << operand_names_.at(id); - } else { - out << id; - } + out << id << "[%" << id_name << "]"; return out.str(); } @@ -291,7 +293,18 @@ bool ValidationState_t::IsOpcodeInCurrentLayoutSection(SpvOp op) { } DiagnosticStream ValidationState_t::diag(spv_result_t error_code, - const Instruction* inst) const { + const Instruction* inst) { + if (error_code == SPV_WARNING) { + if (num_of_warnings_ == max_num_of_warnings_) { + DiagnosticStream({0, 0, 0}, context_->consumer, "", error_code) + << "Other warnings have been suppressed.\n"; + } + if (num_of_warnings_ >= max_num_of_warnings_) { + return DiagnosticStream({0, 0, 0}, nullptr, "", error_code); + } + ++num_of_warnings_; + } + std::string disassembly; if (inst) disassembly = Disassemble(*inst); @@ -351,6 +364,9 @@ void ValidationState_t::RegisterCapability(SpvCapability cap) { features_.group_ops_reduce_and_scans = true; break; case SpvCapabilityInt8: + features_.use_int8_type = true; + features_.declare_int8_type = true; + break; case SpvCapabilityStorageBuffer8BitAccess: case SpvCapabilityUniformAndStorageBuffer8BitAccess: case SpvCapabilityStoragePushConstant8: @@ -390,6 +406,7 @@ void ValidationState_t::RegisterExtension(Extension ext) { switch (ext) { case kSPV_AMD_gpu_shader_half_float: + case kSPV_AMD_gpu_shader_half_float_fetch: // SPV_AMD_gpu_shader_half_float enables float16 type. // https://github.com/KhronosGroup/SPIRV-Tools/issues/1375 features_.declare_float16_type = true; @@ -864,10 +881,17 @@ std::tuple ValidationState_t::EvalInt32IfConst( return std::make_tuple(false, false, 0); } - if (inst->opcode() != SpvOpConstant && inst->opcode() != SpvOpSpecConstant) { + // Spec constant values cannot be evaluated so don't consider constant for + // the purpose of this method. + if (!spvOpcodeIsConstant(inst->opcode()) || + spvOpcodeIsSpecConstant(inst->opcode())) { return std::make_tuple(true, false, 0); } + if (inst->opcode() == SpvOpConstantNull) { + return std::make_tuple(true, true, 0); + } + assert(inst->words().size() == 4); return std::make_tuple(true, true, inst->word(3)); } @@ -895,6 +919,39 @@ void ValidationState_t::ComputeFunctionToEntryPointMapping() { } } +void ValidationState_t::ComputeRecursiveEntryPoints() { + for (const Function func : functions()) { + std::stack call_stack; + std::set visited; + + for (const uint32_t new_call : func.function_call_targets()) { + call_stack.push(new_call); + } + + while (!call_stack.empty()) { + const uint32_t called_func_id = call_stack.top(); + call_stack.pop(); + + if (!visited.insert(called_func_id).second) continue; + + if (called_func_id == func.id()) { + for (const uint32_t entry_point : + function_to_entry_points_[called_func_id]) + recursive_entry_points_.insert(entry_point); + break; + } + + const Function* called_func = function(called_func_id); + if (called_func) { + // Other checks should error out on this invalid SPIR-V. + for (const uint32_t new_call : called_func->function_call_targets()) { + call_stack.push(new_call); + } + } + } + } +} + const std::vector& ValidationState_t::FunctionEntryPoints( uint32_t func) const { auto iter = function_to_entry_points_.find(func); @@ -905,6 +962,34 @@ const std::vector& ValidationState_t::FunctionEntryPoints( } } +std::set ValidationState_t::EntryPointReferences(uint32_t id) const { + std::set referenced_entry_points; + const auto inst = FindDef(id); + if (!inst) return referenced_entry_points; + + std::vector stack; + stack.push_back(inst); + while (!stack.empty()) { + const auto current_inst = stack.back(); + stack.pop_back(); + + if (const auto func = current_inst->function()) { + // Instruction lives in a function, we can stop searching. + const auto function_entry_points = FunctionEntryPoints(func->id()); + referenced_entry_points.insert(function_entry_points.begin(), + function_entry_points.end()); + } else { + // Instruction is in the global scope, keep searching its uses. + for (auto pair : current_inst->uses()) { + const auto next_inst = pair.first; + stack.push_back(next_inst); + } + } + } + + return referenced_entry_points; +} + std::string ValidationState_t::Disassemble(const Instruction& inst) const { const spv_parsed_instruction_t& c_inst(inst.c_inst()); return Disassemble(c_inst.words, c_inst.num_words); diff --git a/3rdparty/spirv-tools/source/val/validation_state.h b/3rdparty/spirv-tools/source/val/validation_state.h index 8c8b53196..85229f2da 100644 --- a/3rdparty/spirv-tools/source/val/validation_state.h +++ b/3rdparty/spirv-tools/source/val/validation_state.h @@ -28,6 +28,7 @@ #include "source/disassemble.h" #include "source/enum_set.h" #include "source/latest_version_spirv_header.h" +#include "source/name_mapper.h" #include "source/spirv_definition.h" #include "source/spirv_validator_options.h" #include "source/val/decoration.h" @@ -86,11 +87,29 @@ class ValidationState_t { // Target environment uses relaxed block layout. // This is true for Vulkan 1.1 or later. bool env_relaxed_block_layout = false; + + // Allow an OpTypeInt with 8 bit width to be used in more than just int + // conversion opcodes + bool use_int8_type = false; + + // Use scalar block layout. See VK_EXT_scalar_block_layout: + // Defines scalar alignment: + // - scalar alignment equals the scalar size in bytes + // - array alignment is same as its element alignment + // - array alignment is max alignment of any of its members + // - vector alignment is same as component alignment + // - matrix alignment is same as component alignment + // For struct in Uniform, StorageBuffer, PushConstant: + // - Offset of a member is multiple of scalar alignment of that member + // - ArrayStride and MatrixStride are multiples of scalar alignment + // Members need not be listed in offset order + bool scalar_block_layout = false; }; ValidationState_t(const spv_const_context context, const spv_const_validator_options opt, - const uint32_t* words, const size_t num_words); + const uint32_t* words, const size_t num_words, + const uint32_t max_warnings); /// Returns the context spv_const_context context() const { return context_; } @@ -136,9 +155,6 @@ class ValidationState_t { /// Mutator function for ID bound. void setIdBound(uint32_t bound); - /// Like getIdName but does not display the id if the \p id has a name - std::string getIdOrName(uint32_t id) const; - /// Returns the number of ID which have been forward referenced but not /// defined size_t unresolved_forward_id_count() const; @@ -169,7 +185,7 @@ class ValidationState_t { /// Determines if the op instruction is part of the current section bool IsOpcodeInCurrentLayoutSection(SpvOp op); - DiagnosticStream diag(spv_result_t error_code, const Instruction* inst) const; + DiagnosticStream diag(spv_result_t error_code, const Instruction* inst); /// Returns the function states std::vector& functions(); @@ -206,6 +222,12 @@ class ValidationState_t { /// Returns a list of entry point function ids const std::vector& entry_points() const { return entry_points_; } + /// Returns the set of entry points that root call graphs that contain + /// recursion. + const std::set& recursive_entry_points() const { + return recursive_entry_points_; + } + /// Registers execution mode for the given entry point. void RegisterExecutionModeForEntryPoint(uint32_t entry_point, SpvExecutionMode execution_mode) { @@ -245,9 +267,19 @@ class ValidationState_t { /// Note: called after fully parsing the binary. void ComputeFunctionToEntryPointMapping(); + /// Traverse call tree and computes recursive_entry_points_. + /// Note: called after fully parsing the binary and calling + /// ComputeFunctionToEntryPointMapping. + void ComputeRecursiveEntryPoints(); + /// Returns all the entry points that can call |func|. const std::vector& FunctionEntryPoints(uint32_t func) const; + /// Returns all the entry points that statically use |id|. + /// + /// Note: requires ComputeFunctionToEntryPointMapping to have been called. + std::set EntryPointReferences(uint32_t id) const; + /// Inserts an to the set of functions that are target of OpFunctionCall. void AddFunctionCallTarget(const uint32_t id) { function_call_targets_.insert(id); @@ -259,6 +291,9 @@ class ValidationState_t { return (function_call_targets_.find(id) != function_call_targets_.end()); } + bool IsFunctionCallDefined(const uint32_t id) { + return (id_to_function_.find(id) != id_to_function_.end()); + } /// Registers the capability and its dependent capabilities void RegisterCapability(SpvCapability cap); @@ -513,6 +548,8 @@ class ValidationState_t { // Tries to evaluate a 32-bit signed or unsigned scalar integer constant. // Returns tuple . + // OpSpecConstant* return |is_const_int32| as false since their values cannot + // be relied upon during validation. std::tuple EvalInt32IfConst(uint32_t id); // Returns the disassembly string for the given instruction. @@ -584,6 +621,10 @@ class ValidationState_t { std::unordered_map> entry_point_descriptions_; + /// IDs that are entry points, ie, arguments to OpEntryPoint, and root a call + /// graph that recurses. + std::set recursive_entry_points_; + /// Functions IDs that are target of OpFunctionCall. std::unordered_set function_call_targets_; @@ -640,6 +681,14 @@ class ValidationState_t { /// module which can (indirectly) call the function. std::unordered_map> function_to_entry_points_; const std::vector empty_ids_; + + /// Maps ids to friendly names. + std::unique_ptr friendly_mapper_; + spvtools::NameMapper name_mapper_; + + /// Variables used to reduce the number of diagnostic messages. + uint32_t num_of_warnings_; + uint32_t max_num_of_warnings_; }; } // namespace val diff --git a/3rdparty/spirv-tools/test/CMakeLists.txt b/3rdparty/spirv-tools/test/CMakeLists.txt index 1fdf5a212..9226ea7f7 100644 --- a/3rdparty/spirv-tools/test/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/CMakeLists.txt @@ -30,12 +30,16 @@ endif() function(add_spvtools_unittest) if (NOT "${SPIRV_SKIP_TESTS}" AND TARGET gmock_main) - set(one_value_args TARGET) + set(one_value_args TARGET PCH_FILE) set(multi_value_args SRCS LIBS ENVIRONMENT) cmake_parse_arguments( ARG "" "${one_value_args}" "${multi_value_args}" ${ARGN}) set(target test_${ARG_TARGET}) - add_executable(${target} ${ARG_SRCS}) + set(SRC_COPY ${ARG_SRCS}) + if (DEFINED ARG_PCH_FILE) + spvtools_pch(SRC_COPY ${ARG_PCH_FILE}) + endif() + add_executable(${target} ${SRC_COPY}) spvtools_default_compile_options(${target}) if(${COMPILER_IS_LIKE_GNU}) target_compile_options(${target} PRIVATE -Wno-undef) @@ -93,6 +97,7 @@ set(TEST_SOURCES binary_to_text_test.cpp binary_to_text.literal_test.cpp comment_test.cpp + diagnostic_test.cpp enum_string_mapping_test.cpp enum_set_test.cpp ext_inst.debuginfo_test.cpp @@ -103,6 +108,7 @@ set(TEST_SOURCES hex_float_test.cpp immediate_int_test.cpp libspirv_macros_test.cpp + log_test.cpp named_id_test.cpp name_mapper_test.cpp opcode_make_test.cpp @@ -112,7 +118,10 @@ set(TEST_SOURCES operand_capabilities_test.cpp operand_test.cpp operand_pattern_test.cpp + parse_number_test.cpp + preserve_numeric_ids_test.cpp software_version_test.cpp + string_utils_test.cpp target_env_test.cpp text_advance_test.cpp text_destroy_test.cpp @@ -142,16 +151,13 @@ set(TEST_SOURCES unit_spirv.cpp ) +spvtools_pch(TEST_SOURCES pch_test) + add_spvtools_unittest( TARGET spirv_unit_tests SRCS ${TEST_SOURCES} LIBS ${SPIRV_TOOLS}) -add_spvtools_unittest( - TARGET diagnostic - SRCS diagnostic_test.cpp - LIBS ${SPIRV_TOOLS}) - add_spvtools_unittest( TARGET c_interface SRCS c_interface_test.cpp @@ -168,16 +174,6 @@ add_spvtools_unittest( SRCS cpp_interface_test.cpp LIBS SPIRV-Tools-opt) -add_spvtools_unittest( - TARGET parse_number - SRCS parse_number_test.cpp - LIBS ${SPIRV_TOOLS}) - -add_spvtools_unittest( - TARGET string_utils - SRCS string_utils_test.cpp - LIBS ${SPIRV_TOOLS}) - if (${SPIRV_TIMER_ENABLED}) add_spvtools_unittest( TARGET timer @@ -185,15 +181,6 @@ add_spvtools_unittest( LIBS ${SPIRV_TOOLS}) endif() -add_spvtools_unittest( - TARGET log - SRCS log_test.cpp - LIBS ${SPIRV_TOOLS}) - -add_spvtools_unittest( - TARGET preserve_numeric_ids - SRCS preserve_numeric_ids_test.cpp - LIBS ${SPIRV_TOOLS}) add_spvtools_unittest( TARGET bit_stream @@ -220,6 +207,7 @@ add_spvtools_unittest( add_subdirectory(comp) add_subdirectory(link) add_subdirectory(opt) +add_subdirectory(reduce) add_subdirectory(stats) add_subdirectory(tools) add_subdirectory(util) diff --git a/3rdparty/spirv-tools/test/binary_parse_test.cpp b/3rdparty/spirv-tools/test/binary_parse_test.cpp index 7d9700158..dfff79df4 100644 --- a/3rdparty/spirv-tools/test/binary_parse_test.cpp +++ b/3rdparty/spirv-tools/test/binary_parse_test.cpp @@ -267,52 +267,48 @@ TEST_F(BinaryParseTest, NullDiagnosticsIsOkForBadParse) { TEST_F(BinaryParseTest, NullConsumerNullDiagnosticsForBadParse) { auto words = CompileSuccessfully(""); - auto ctx = spvContextCreate(SPV_ENV_UNIVERSAL_1_1); - SetContextMessageConsumer(ctx, nullptr); + auto ctx = spvtools::Context(SPV_ENV_UNIVERSAL_1_1); + ctx.SetMessageConsumer(nullptr); words.push_back(0xffffffff); // Certainly invalid instruction header. EXPECT_HEADER(1).WillOnce(Return(SPV_SUCCESS)); EXPECT_CALL(client_, Instruction(_)).Times(0); // No instruction callback. EXPECT_EQ(SPV_ERROR_INVALID_BINARY, - spvBinaryParse(ctx, &client_, words.data(), words.size(), + spvBinaryParse(ctx.CContext(), &client_, words.data(), words.size(), invoke_header, invoke_instruction, nullptr)); - - spvContextDestroy(ctx); } TEST_F(BinaryParseTest, SpecifyConsumerNullDiagnosticsForGoodParse) { const auto words = CompileSuccessfully(""); - auto ctx = spvContextCreate(SPV_ENV_UNIVERSAL_1_1); + auto ctx = spvtools::Context(SPV_ENV_UNIVERSAL_1_1); int invocation = 0; - SetContextMessageConsumer( - ctx, [&invocation](spv_message_level_t, const char*, - const spv_position_t&, const char*) { ++invocation; }); + ctx.SetMessageConsumer([&invocation](spv_message_level_t, const char*, + const spv_position_t&, + const char*) { ++invocation; }); EXPECT_HEADER(1).WillOnce(Return(SPV_SUCCESS)); EXPECT_CALL(client_, Instruction(_)).Times(0); // No instruction callback. EXPECT_EQ(SPV_SUCCESS, - spvBinaryParse(ctx, &client_, words.data(), words.size(), + spvBinaryParse(ctx.CContext(), &client_, words.data(), words.size(), invoke_header, invoke_instruction, nullptr)); EXPECT_EQ(0, invocation); - - spvContextDestroy(ctx); } TEST_F(BinaryParseTest, SpecifyConsumerNullDiagnosticsForBadParse) { auto words = CompileSuccessfully(""); - auto ctx = spvContextCreate(SPV_ENV_UNIVERSAL_1_1); + auto ctx = spvtools::Context(SPV_ENV_UNIVERSAL_1_1); int invocation = 0; - SetContextMessageConsumer( - ctx, [&invocation](spv_message_level_t level, const char* source, - const spv_position_t& position, const char* message) { + ctx.SetMessageConsumer( + [&invocation](spv_message_level_t level, const char* source, + const spv_position_t& position, const char* message) { ++invocation; EXPECT_EQ(SPV_MSG_ERROR, level); EXPECT_STREQ("input", source); EXPECT_EQ(0u, position.line); EXPECT_EQ(0u, position.column); - EXPECT_EQ(5u, position.index); + EXPECT_EQ(1u, position.index); EXPECT_STREQ("Invalid opcode: 65535", message); }); @@ -320,52 +316,46 @@ TEST_F(BinaryParseTest, SpecifyConsumerNullDiagnosticsForBadParse) { EXPECT_HEADER(1).WillOnce(Return(SPV_SUCCESS)); EXPECT_CALL(client_, Instruction(_)).Times(0); // No instruction callback. EXPECT_EQ(SPV_ERROR_INVALID_BINARY, - spvBinaryParse(ctx, &client_, words.data(), words.size(), + spvBinaryParse(ctx.CContext(), &client_, words.data(), words.size(), invoke_header, invoke_instruction, nullptr)); EXPECT_EQ(1, invocation); - - spvContextDestroy(ctx); } TEST_F(BinaryParseTest, SpecifyConsumerSpecifyDiagnosticsForGoodParse) { const auto words = CompileSuccessfully(""); - auto ctx = spvContextCreate(SPV_ENV_UNIVERSAL_1_1); + auto ctx = spvtools::Context(SPV_ENV_UNIVERSAL_1_1); int invocation = 0; - SetContextMessageConsumer( - ctx, [&invocation](spv_message_level_t, const char*, - const spv_position_t&, const char*) { ++invocation; }); + ctx.SetMessageConsumer([&invocation](spv_message_level_t, const char*, + const spv_position_t&, + const char*) { ++invocation; }); EXPECT_HEADER(1).WillOnce(Return(SPV_SUCCESS)); EXPECT_CALL(client_, Instruction(_)).Times(0); // No instruction callback. EXPECT_EQ(SPV_SUCCESS, - spvBinaryParse(ctx, &client_, words.data(), words.size(), + spvBinaryParse(ctx.CContext(), &client_, words.data(), words.size(), invoke_header, invoke_instruction, &diagnostic_)); EXPECT_EQ(0, invocation); EXPECT_EQ(nullptr, diagnostic_); - - spvContextDestroy(ctx); } TEST_F(BinaryParseTest, SpecifyConsumerSpecifyDiagnosticsForBadParse) { auto words = CompileSuccessfully(""); - auto ctx = spvContextCreate(SPV_ENV_UNIVERSAL_1_1); + auto ctx = spvtools::Context(SPV_ENV_UNIVERSAL_1_1); int invocation = 0; - SetContextMessageConsumer( - ctx, [&invocation](spv_message_level_t, const char*, - const spv_position_t&, const char*) { ++invocation; }); + ctx.SetMessageConsumer([&invocation](spv_message_level_t, const char*, + const spv_position_t&, + const char*) { ++invocation; }); words.push_back(0xffffffff); // Certainly invalid instruction header. EXPECT_HEADER(1).WillOnce(Return(SPV_SUCCESS)); EXPECT_CALL(client_, Instruction(_)).Times(0); // No instruction callback. EXPECT_EQ(SPV_ERROR_INVALID_BINARY, - spvBinaryParse(ctx, &client_, words.data(), words.size(), + spvBinaryParse(ctx.CContext(), &client_, words.data(), words.size(), invoke_header, invoke_instruction, &diagnostic_)); EXPECT_EQ(0, invocation); EXPECT_STREQ("Invalid opcode: 65535", diagnostic_->error); - - spvContextDestroy(ctx); } TEST_F(BinaryParseTest, @@ -890,8 +880,8 @@ INSTANTIATE_TEST_CASE_P( "Invalid function control operand: 31 has invalid mask component 16"}, {"OpLoopMerge %1 %2 !1027", "Invalid loop control operand: 1027 has invalid mask component 1024"}, - {"%2 = OpImageFetch %1 %image %coord !511", - "Invalid image operand: 511 has invalid mask component 256"}, + {"%2 = OpImageFetch %1 %image %coord !32770", + "Invalid image operand: 32770 has invalid mask component 32768"}, {"OpSelectionMerge %1 !7", "Invalid selection control operand: 7 has invalid mask component 4"}, }), ); diff --git a/3rdparty/spirv-tools/test/c_interface_test.cpp b/3rdparty/spirv-tools/test/c_interface_test.cpp index 1b735be5d..c644fb9ba 100644 --- a/3rdparty/spirv-tools/test/c_interface_test.cpp +++ b/3rdparty/spirv-tools/test/c_interface_test.cpp @@ -150,7 +150,7 @@ TEST(CInterface, SpecifyConsumerNullDiagnosticForDisassembling) { EXPECT_STREQ("input", source); EXPECT_EQ(0u, position.line); EXPECT_EQ(0u, position.column); - EXPECT_EQ(5u, position.index); + EXPECT_EQ(1u, position.index); EXPECT_STREQ("Invalid opcode: 65535", message); }); diff --git a/3rdparty/spirv-tools/test/comp/markv_codec_test.cpp b/3rdparty/spirv-tools/test/comp/markv_codec_test.cpp index 76918f747..283fcd3ca 100644 --- a/3rdparty/spirv-tools/test/comp/markv_codec_test.cpp +++ b/3rdparty/spirv-tools/test/comp/markv_codec_test.cpp @@ -57,13 +57,13 @@ void DiagnosticsMessageHandler(spv_message_level_t level, const char*, void Compile(const std::string& code, std::vector* words, uint32_t options = SPV_TEXT_TO_BINARY_OPTION_NONE, spv_target_env env = SPV_ENV_UNIVERSAL_1_2) { - ScopedContext ctx(env); - SetContextMessageConsumer(ctx.context, DiagnosticsMessageHandler); + spvtools::Context ctx(env); + ctx.SetMessageConsumer(DiagnosticsMessageHandler); spv_binary spirv_binary; - ASSERT_EQ(SPV_SUCCESS, - spvTextToBinaryWithOptions(ctx.context, code.c_str(), code.size(), - options, &spirv_binary, nullptr)); + ASSERT_EQ(SPV_SUCCESS, spvTextToBinaryWithOptions( + ctx.CContext(), code.c_str(), code.size(), options, + &spirv_binary, nullptr)); *words = std::vector(spirv_binary->code, spirv_binary->code + spirv_binary->wordCount); @@ -74,11 +74,11 @@ void Compile(const std::string& code, std::vector* words, // Disassembles SPIR-V |words| to |out_text|. void Disassemble(const std::vector& words, std::string* out_text, spv_target_env env = SPV_ENV_UNIVERSAL_1_2) { - ScopedContext ctx(env); - SetContextMessageConsumer(ctx.context, DiagnosticsMessageHandler); + spvtools::Context ctx(env); + ctx.SetMessageConsumer(DiagnosticsMessageHandler); spv_text text = nullptr; - ASSERT_EQ(SPV_SUCCESS, spvBinaryToText(ctx.context, words.data(), + ASSERT_EQ(SPV_SUCCESS, spvBinaryToText(ctx.CContext(), words.data(), words.size(), 0, &text, nullptr)); assert(text); @@ -90,7 +90,7 @@ void Disassemble(const std::vector& words, std::string* out_text, // the results of the two operations. void TestEncodeDecode(MarkvModelType model_type, const std::string& original_text) { - ScopedContext ctx(SPV_ENV_UNIVERSAL_1_2); + spvtools::Context ctx(SPV_ENV_UNIVERSAL_1_2); std::unique_ptr model = CreateMarkvModel(model_type); MarkvCodecOptions options; @@ -113,14 +113,14 @@ void TestEncodeDecode(MarkvModelType model_type, std::vector markv; ASSERT_EQ(SPV_SUCCESS, - SpirvToMarkv(ctx.context, binary_to_encode, options, *model, + SpirvToMarkv(ctx.CContext(), binary_to_encode, options, *model, DiagnosticsMessageHandler, output_to_string_stream, MarkvDebugConsumer(), &markv)); ASSERT_FALSE(markv.empty()); std::vector decoded_binary; ASSERT_EQ(SPV_SUCCESS, - MarkvToSpirv(ctx.context, markv, options, *model, + MarkvToSpirv(ctx.CContext(), markv, options, *model, DiagnosticsMessageHandler, MarkvLogConsumer(), MarkvDebugConsumer(), &decoded_binary)); ASSERT_FALSE(decoded_binary.empty()); diff --git a/3rdparty/spirv-tools/test/cpp_interface_test.cpp b/3rdparty/spirv-tools/test/cpp_interface_test.cpp index bcc2cd6c7..538d40fd4 100644 --- a/3rdparty/spirv-tools/test/cpp_interface_test.cpp +++ b/3rdparty/spirv-tools/test/cpp_interface_test.cpp @@ -36,6 +36,10 @@ OpMemoryModel Logical GLSL450 )"; } +// When we assemble with a target environment of SPIR-V 1.1, we expect +// the following in the module header version word. +const uint32_t kExpectedSpvVersion = 0x10100; + TEST(CppInterface, SuccessfulRoundTrip) { const std::string input_text = "%2 = OpSizeOf %1 %3\n"; SpirvTools t(SPV_ENV_UNIVERSAL_1_1); @@ -44,7 +48,7 @@ TEST(CppInterface, SuccessfulRoundTrip) { EXPECT_TRUE(t.Assemble(input_text, &binary)); EXPECT_TRUE(binary.size() > 5u); EXPECT_EQ(SpvMagicNumber, binary[0]); - EXPECT_EQ(SpvVersion, binary[1]); + EXPECT_EQ(kExpectedSpvVersion, binary[1]); // This cannot pass validation since %1 is not defined. t.SetMessageConsumer([](spv_message_level_t level, const char* source, @@ -54,7 +58,8 @@ TEST(CppInterface, SuccessfulRoundTrip) { EXPECT_EQ(0u, position.line); EXPECT_EQ(0u, position.column); EXPECT_EQ(1u, position.index); - EXPECT_STREQ("ID 1 has not been defined\n %2 = OpSizeOf %1 %3\n", message); + EXPECT_STREQ("ID 1[%1] has not been defined\n %2 = OpSizeOf %1 %3\n", + message); }); EXPECT_FALSE(t.Validate(binary)); @@ -70,7 +75,7 @@ TEST(CppInterface, AssembleEmptyModule) { // We only have the header. EXPECT_EQ(5u, binary.size()); EXPECT_EQ(SpvMagicNumber, binary[0]); - EXPECT_EQ(SpvVersion, binary[1]); + EXPECT_EQ(kExpectedSpvVersion, binary[1]); } TEST(CppInterface, AssembleOverloads) { @@ -81,21 +86,21 @@ TEST(CppInterface, AssembleOverloads) { EXPECT_TRUE(t.Assemble(input_text, &binary)); EXPECT_TRUE(binary.size() > 5u); EXPECT_EQ(SpvMagicNumber, binary[0]); - EXPECT_EQ(SpvVersion, binary[1]); + EXPECT_EQ(kExpectedSpvVersion, binary[1]); } { std::vector binary; EXPECT_TRUE(t.Assemble(input_text.data(), input_text.size(), &binary)); EXPECT_TRUE(binary.size() > 5u); EXPECT_EQ(SpvMagicNumber, binary[0]); - EXPECT_EQ(SpvVersion, binary[1]); + EXPECT_EQ(kExpectedSpvVersion, binary[1]); } { // Ignore the last newline. std::vector binary; EXPECT_TRUE(t.Assemble(input_text.data(), input_text.size() - 1, &binary)); EXPECT_TRUE(binary.size() > 5u); EXPECT_EQ(SpvMagicNumber, binary[0]); - EXPECT_EQ(SpvVersion, binary[1]); + EXPECT_EQ(kExpectedSpvVersion, binary[1]); } } diff --git a/3rdparty/spirv-tools/test/fuzzers/BUILD.gn b/3rdparty/spirv-tools/test/fuzzers/BUILD.gn index df8291a56..69659c661 100644 --- a/3rdparty/spirv-tools/test/fuzzers/BUILD.gn +++ b/3rdparty/spirv-tools/test/fuzzers/BUILD.gn @@ -16,7 +16,7 @@ import("//testing/libfuzzer/fuzzer_test.gni") import("//testing/test.gni") config("fuzzer_config") { - configs = [ "../..:spvtools_config" ] + configs = [ "../..:spvtools_internal_config" ] } group("fuzzers") { @@ -33,10 +33,11 @@ if (!build_with_chromium || use_fuzzing_engine) { testonly = true deps = [ - ":spvtools_val_fuzzer", + ":spvtools_binary_parser_fuzzer", ":spvtools_opt_legalization_fuzzer", ":spvtools_opt_performance_fuzzer", ":spvtools_opt_size_fuzzer", + ":spvtools_val_fuzzer", ] } } @@ -62,6 +63,12 @@ template("spvtools_fuzzer") { } } +spvtools_fuzzer("spvtools_binary_parser_fuzzer_src") { + sources = [ + "spvtools_binary_parser_fuzzer.cpp", + ] +} + spvtools_fuzzer("spvtools_opt_performance_fuzzer_src") { sources = [ "spvtools_opt_performance_fuzzer.cpp", @@ -87,6 +94,15 @@ spvtools_fuzzer("spvtools_val_fuzzer_src") { } if (!build_with_chromium || use_fuzzing_engine) { + fuzzer_test("spvtools_binary_parser_fuzzer") { + sources = [] + deps = [ + ":spvtools_binary_parser_fuzzer_src", + ] + # Intentionally doesn't use the seed corpus, because it consumes + # part of the input as not part of the file. + } + fuzzer_test("spvtools_opt_performance_fuzzer") { sources = [] deps = [ diff --git a/3rdparty/spirv-tools/test/fuzzers/spvtools_binary_parser_fuzzer.cpp b/3rdparty/spirv-tools/test/fuzzers/spvtools_binary_parser_fuzzer.cpp new file mode 100644 index 000000000..76ba4d9e9 --- /dev/null +++ b/3rdparty/spirv-tools/test/fuzzers/spvtools_binary_parser_fuzzer.cpp @@ -0,0 +1,44 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "spirv-tools/libspirv.hpp" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + if (size < sizeof(spv_target_env) + 1) return 0; + + const spv_context context = + spvContextCreate(*reinterpret_cast(data)); + if (context == nullptr) return 0; + + data += sizeof(spv_target_env); + size -= sizeof(spv_target_env); + + std::vector input; + input.resize(size >> 2); + + size_t count = 0; + for (size_t i = 0; (i + 3) < size; i += 4) { + input[count++] = data[i] | (data[i + 1] << 8) | (data[i + 2] << 16) | + (data[i + 3]) << 24; + } + + spvBinaryParse(context, nullptr, input.data(), input.size(), nullptr, nullptr, + nullptr); + + spvContextDestroy(context); + return 0; +} diff --git a/3rdparty/spirv-tools/test/operand_capabilities_test.cpp b/3rdparty/spirv-tools/test/operand_capabilities_test.cpp index 0aeb505f0..e58bc9d2b 100644 --- a/3rdparty/spirv-tools/test/operand_capabilities_test.cpp +++ b/3rdparty/spirv-tools/test/operand_capabilities_test.cpp @@ -161,9 +161,10 @@ INSTANTIATE_TEST_CASE_P( Geometry), CASE1(EXECUTION_MODE, ExecutionModeQuads, Tessellation), CASE1(EXECUTION_MODE, ExecutionModeIsolines, Tessellation), - CASE2(EXECUTION_MODE, ExecutionModeOutputVertices, Geometry, - Tessellation), - CASE1(EXECUTION_MODE, ExecutionModeOutputPoints, Geometry), + CASE3(EXECUTION_MODE, ExecutionModeOutputVertices, Geometry, + Tessellation, MeshShadingNV), + CASE2(EXECUTION_MODE, ExecutionModeOutputPoints, Geometry, + MeshShadingNV), CASE1(EXECUTION_MODE, ExecutionModeOutputLineStrip, Geometry), CASE1(EXECUTION_MODE, ExecutionModeOutputTriangleStrip, Geometry), CASE1(EXECUTION_MODE, ExecutionModeVecTypeHint, Kernel), @@ -205,12 +206,12 @@ INSTANTIATE_TEST_CASE_P( Dim, EnumCapabilityTest, Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1), ValuesIn(std::vector{ - CASE1(DIMENSIONALITY, Dim1D, Sampled1D), - CASE0(DIMENSIONALITY, Dim2D), + CASE2(DIMENSIONALITY, Dim1D, Sampled1D, Image1D), + CASE3(DIMENSIONALITY, Dim2D, Kernel, Shader, ImageMSArray), CASE0(DIMENSIONALITY, Dim3D), - CASE1(DIMENSIONALITY, DimCube, Shader), - CASE1(DIMENSIONALITY, DimRect, SampledRect), - CASE1(DIMENSIONALITY, DimBuffer, SampledBuffer), + CASE2(DIMENSIONALITY, DimCube, Shader, ImageCubeArray), + CASE2(DIMENSIONALITY, DimRect, SampledRect, ImageRect), + CASE2(DIMENSIONALITY, DimBuffer, SampledBuffer, ImageBuffer), CASE1(DIMENSIONALITY, DimSubpassData, InputAttachment), })), ); @@ -490,7 +491,8 @@ INSTANTIATE_TEST_CASE_P( CASE1(BUILT_IN, BuiltInCullDistance, CullDistance), // Bug 1407, 15234 CASE1(BUILT_IN, BuiltInVertexId, Shader), CASE1(BUILT_IN, BuiltInInstanceId, Shader), - CASE2(BUILT_IN, BuiltInPrimitiveId, Geometry, Tessellation), + CASE3(BUILT_IN, BuiltInPrimitiveId, Geometry, Tessellation, + RayTracingNV), CASE2(BUILT_IN, BuiltInInvocationId, Geometry, Tessellation), CASE1(BUILT_IN, BuiltInLayer, Geometry), CASE1(BUILT_IN, BuiltInViewportIndex, MultiViewport), // Bug 15234 @@ -604,16 +606,18 @@ INSTANTIATE_TEST_CASE_P( })), ); // See SPIR-V Section 3.27 Scope -INSTANTIATE_TEST_CASE_P(Scope, EnumCapabilityTest, - Combine(Values(SPV_ENV_UNIVERSAL_1_0, - SPV_ENV_UNIVERSAL_1_1), - ValuesIn(std::vector{ - CASE0(SCOPE_ID, ScopeCrossDevice), - CASE0(SCOPE_ID, ScopeDevice), - CASE0(SCOPE_ID, ScopeWorkgroup), - CASE0(SCOPE_ID, ScopeSubgroup), - CASE0(SCOPE_ID, ScopeInvocation), - })), ); +INSTANTIATE_TEST_CASE_P( + Scope, EnumCapabilityTest, + Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1, + SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_3), + ValuesIn(std::vector{ + CASE0(SCOPE_ID, ScopeCrossDevice), + CASE0(SCOPE_ID, ScopeDevice), + CASE0(SCOPE_ID, ScopeWorkgroup), + CASE0(SCOPE_ID, ScopeSubgroup), + CASE0(SCOPE_ID, ScopeInvocation), + CASE1(SCOPE_ID, ScopeQueueFamilyKHR, VulkanMemoryModelKHR), + })), ); // See SPIR-V Section 3.28 Group Operation INSTANTIATE_TEST_CASE_P( diff --git a/3rdparty/spirv-tools/test/operand_pattern_test.cpp b/3rdparty/spirv-tools/test/operand_pattern_test.cpp index b3e302490..d2d92a01d 100644 --- a/3rdparty/spirv-tools/test/operand_pattern_test.cpp +++ b/3rdparty/spirv-tools/test/operand_pattern_test.cpp @@ -89,9 +89,11 @@ INSTANTIATE_TEST_CASE_P( ::testing::ValuesIn(std::vector{ // No bits means no change. {SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, 0, {PREFIX0}, {PREFIX0}}, - // Unknown bits means no change. + // Unknown bits means no change. Use all bits that aren't in the + // grammar. + // The last mask enum is 0x20 {SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, - 0xfffffffc, + 0xffffffc0, {PREFIX1}, {PREFIX1}}, // Volatile has no operands. diff --git a/3rdparty/spirv-tools/test/opt/CMakeLists.txt b/3rdparty/spirv-tools/test/opt/CMakeLists.txt index f2741f673..1e32df38c 100644 --- a/3rdparty/spirv-tools/test/opt/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/opt/CMakeLists.txt @@ -15,325 +15,82 @@ add_subdirectory(dominator_tree) add_subdirectory(loop_optimizations) -add_spvtools_unittest(TARGET instruction - SRCS instruction_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET instruction_list - SRCS instruction_list_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET ir_loader - SRCS ir_loader_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_manager - SRCS module_utils.h - pass_manager_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET optimizer - SRCS optimizer_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_strip_debug_info - SRCS strip_debug_info_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_strip_reflect_info - SRCS strip_reflect_info_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_compact_ids - SRCS compact_ids_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_flatten_decoration - SRCS flatten_decoration_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_freeze_spec_const - SRCS freeze_spec_const_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_block_merge - SRCS block_merge_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_inline - SRCS inline_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_inline_opaque - SRCS inline_opaque_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_insert_extract_elim - SRCS insert_extract_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_dead_insert_elim - SRCS dead_insert_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_local_ssa_elim - SRCS local_ssa_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_local_single_block_elim - SRCS local_single_block_elim.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_local_access_chain_convert - SRCS local_access_chain_convert_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_local_single_store_elim - SRCS local_single_store_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_dead_branch_elim - SRCS dead_branch_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_dead_variable_elim - SRCS dead_variable_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_aggressive_dce - SRCS aggressive_dead_code_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_common_uniform_elim - SRCS common_uniform_elim_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_eliminate_dead_const - SRCS eliminate_dead_const_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_eliminate_dead_functions - SRCS eliminate_dead_functions_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_pass - SRCS pass_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_utils - SRCS utils_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET def_use - SRCS def_use_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET assembly_builder - SRCS assembly_builder_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET types - SRCS types_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET type_manager - SRCS type_manager_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET iterator - SRCS iterator_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET module - SRCS module_utils.h +add_spvtools_unittest(TARGET opt + SRCS aggressive_dead_code_elim_test.cpp + assembly_builder_test.cpp + block_merge_test.cpp + ccp_test.cpp + cfg_cleanup_test.cpp + combine_access_chains_test.cpp + common_uniform_elim_test.cpp + compact_ids_test.cpp + constant_manager_test.cpp + copy_prop_array_test.cpp + dead_branch_elim_test.cpp + dead_insert_elim_test.cpp + dead_variable_elim_test.cpp + decoration_manager_test.cpp + def_use_test.cpp + eliminate_dead_const_test.cpp + eliminate_dead_functions_test.cpp + feature_manager_test.cpp + flatten_decoration_test.cpp + fold_spec_const_op_composite_test.cpp + fold_test.cpp + freeze_spec_const_test.cpp + function_test.cpp + if_conversion_test.cpp + inline_opaque_test.cpp + inline_test.cpp + insert_extract_elim_test.cpp + inst_bindless_check_test.cpp + instruction_list_test.cpp + instruction_test.cpp + ir_builder.cpp + ir_context_test.cpp + ir_loader_test.cpp + iterator_test.cpp + line_debug_info_test.cpp + local_access_chain_convert_test.cpp + local_redundancy_elimination_test.cpp + local_single_block_elim.cpp + local_single_store_elim_test.cpp + local_ssa_elim_test.cpp module_test.cpp + module_utils.h + optimizer_test.cpp + pass_manager_test.cpp + pass_merge_return_test.cpp + pass_remove_duplicates_test.cpp + pass_utils.cpp + private_to_local_test.cpp + process_lines_test.cpp + propagator_test.cpp + reduce_load_size_test.cpp + redundancy_elimination_test.cpp + register_liveness.cpp + replace_invalid_opc_test.cpp + scalar_analysis.cpp + scalar_replacement_test.cpp + set_spec_const_default_value_test.cpp + simplification_test.cpp + strength_reduction_test.cpp + strip_debug_info_test.cpp + strip_reflect_info_test.cpp + struct_cfg_analysis_test.cpp + type_manager_test.cpp + types_test.cpp + unify_const_test.cpp + utils_test.cpp pass_utils.cpp + value_table_test.cpp + vector_dce_test.cpp + workaround1209_test.cpp LIBS SPIRV-Tools-opt + PCH_FILE pch_test_opt ) -add_spvtools_unittest(TARGET pass_fold_spec_const_op_composite - SRCS fold_spec_const_op_composite_test.cpp pass_utils.cpp +add_spvtools_unittest(TARGET upgrade_memory_model + SRCS upgrade_memory_model_test.cpp pass_utils.cpp LIBS SPIRV-Tools-opt + PCH_FILE pch_test_opt ) - -add_spvtools_unittest(TARGET pass_unify_const - SRCS unify_const_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_set_spec_const_default_value - SRCS set_spec_const_default_value_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET line_debug_info - SRCS line_debug_info_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_strength_reduction - SRCS strength_reduction_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_scalar_replacement - SRCS scalar_replacement_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET cfg_cleanup - SRCS cfg_cleanup_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET ir_context - SRCS ir_context_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET feature_manager - SRCS feature_manager_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_merge_return - SRCS pass_merge_return_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET value_table - SRCS value_table_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET local_redundancy_elimination - SRCS local_redundancy_elimination_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET propagator - SRCS propagator_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET redundancy_elimination - SRCS redundancy_elimination_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET private_to_local - SRCS private_to_local_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET decoration_manager - SRCS decoration_manager_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_remove_duplicates - SRCS pass_remove_duplicates_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET ccp - SRCS ccp_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_workaround1209 - SRCS workaround1209_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET pass_if_conversion - SRCS if_conversion_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET ir_builder - SRCS ir_builder.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET instruction_folding - SRCS fold_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET replace_invalid_opc - SRCS replace_invalid_opc_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET register_liveness - SRCS register_liveness.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET simplification - SRCS simplification_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET copy_prop_array - SRCS copy_prop_array_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET scalar_analysis - SRCS scalar_analysis.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET vector_dce - SRCS vector_dce_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET reduce_load_size - SRCS reduce_load_size_test.cpp pass_utils.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET constant_manager - SRCS constant_manager_test.cpp - LIBS SPIRV-Tools-opt -) - -add_spvtools_unittest(TARGET combine_access_chains - SRCS combine_access_chains_test.cpp - LIBS SPIRV-Tools-opt -) - diff --git a/3rdparty/spirv-tools/test/opt/aggressive_dead_code_elim_test.cpp b/3rdparty/spirv-tools/test/opt/aggressive_dead_code_elim_test.cpp index 287fcef0f..e58a76f71 100644 --- a/3rdparty/spirv-tools/test/opt/aggressive_dead_code_elim_test.cpp +++ b/3rdparty/spirv-tools/test/opt/aggressive_dead_code_elim_test.cpp @@ -3597,6 +3597,8 @@ OpFunctionEnd SinglePassRunAndCheck(assembly, assembly, true, true); } +// This is not valid input and ADCE does not support variable pointers and only +// supports shaders. TEST_F(AggressiveDCETest, PointerVariable) { // ADCE is able to handle code that contains a load whose base address // comes from a load and not an OpVariable. I want to see an instruction @@ -3693,6 +3695,10 @@ OpReturn OpFunctionEnd )"; + // The input is not valid and ADCE only supports shaders, but not variable + // pointers. Workaround this by enabling relaxed logical pointers in the + // validator. + ValidatorOptions()->relax_logical_pointer = true; SinglePassRunAndCheck(before, after, true, true); } @@ -3873,7 +3879,6 @@ OpFunctionEnd SinglePassRunAndCheck(before, after, true, true); } -#ifdef SPIRV_EFFCEE TEST_F(AggressiveDCETest, DeadNestedSwitch) { const std::string text = R"( ; CHECK: OpLabel @@ -3919,7 +3924,6 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE TEST_F(AggressiveDCETest, LiveNestedSwitch) { const std::string text = R"(OpCapability Shader @@ -4095,7 +4099,6 @@ OpFunctionEnd /* skip_nop = */ true); } -#ifdef SPIRV_EFFCEE TEST_F(AggressiveDCETest, BasicAllDeadConstants) { const std::string text = R"( ; CHECK-NOT: OpConstant @@ -4126,7 +4129,6 @@ TEST_F(AggressiveDCETest, BasicAllDeadConstants) { SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE TEST_F(AggressiveDCETest, BasicNoneDeadConstants) { const std::vector text = { @@ -4184,7 +4186,7 @@ TEST_F(AggressiveDCETest, BasicNoneDeadConstants) { JoinAllInsts(text), JoinAllInsts(text), /* skip_nop = */ true); } -struct EliminateDeadConstantTestCase { +struct AggressiveEliminateDeadConstantTestCase { // Type declarations and constants that should be kept. std::vector used_consts; // Instructions that refer to constants, this is added to create uses for @@ -4196,7 +4198,8 @@ struct EliminateDeadConstantTestCase { std::vector checks; }; -// All types that are potentially required in EliminateDeadConstantTest. +// All types that are potentially required in +// AggressiveEliminateDeadConstantTest. const std::vector CommonTypes = { // clang-format off // scalar types @@ -4232,11 +4235,10 @@ const std::vector CommonTypes = { // clang-format on }; -using EliminateDeadConstantTest = - PassTest<::testing::TestWithParam>; +using AggressiveEliminateDeadConstantTest = + PassTest<::testing::TestWithParam>; -#ifdef SPIRV_EFFCEE -TEST_P(EliminateDeadConstantTest, Custom) { +TEST_P(AggressiveEliminateDeadConstantTest, Custom) { auto& tc = GetParam(); AssemblyBuilder builder; builder.AppendTypesConstantsGlobals(CommonTypes) @@ -4253,8 +4255,8 @@ TEST_P(EliminateDeadConstantTest, Custom) { } INSTANTIATE_TEST_CASE_P( - ScalarTypeConstants, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + ScalarTypeConstants, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // Scalar type constants, one dead constant and one used constant. { @@ -4345,8 +4347,8 @@ INSTANTIATE_TEST_CASE_P( }))); INSTANTIATE_TEST_CASE_P( - VectorTypeConstants, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + VectorTypeConstants, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // Tests eliminating dead constant type ivec2. One dead constant vector // and one used constant vector, each built from its own group of @@ -4472,8 +4474,8 @@ INSTANTIATE_TEST_CASE_P( }))); INSTANTIATE_TEST_CASE_P( - StructTypeConstants, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + StructTypeConstants, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // A plain struct type dead constants. All of its components are dead // constants too. @@ -4643,8 +4645,8 @@ INSTANTIATE_TEST_CASE_P( }))); INSTANTIATE_TEST_CASE_P( - ScalarTypeSpecConstants, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + ScalarTypeSpecConstants, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // All scalar type spec constants. { @@ -4696,8 +4698,8 @@ INSTANTIATE_TEST_CASE_P( }))); INSTANTIATE_TEST_CASE_P( - VectorTypeSpecConstants, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + VectorTypeSpecConstants, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // Bool vector type spec constants. One vector has all component dead, // another vector has one dead boolean and one used boolean. @@ -4818,8 +4820,8 @@ INSTANTIATE_TEST_CASE_P( }))); INSTANTIATE_TEST_CASE_P( - SpecConstantOp, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + SpecConstantOp, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // Cast operations: uint <-> int <-> bool { @@ -5000,8 +5002,8 @@ INSTANTIATE_TEST_CASE_P( }))); INSTANTIATE_TEST_CASE_P( - LongDefUseChain, EliminateDeadConstantTest, - ::testing::ValuesIn(std::vector({ + LongDefUseChain, AggressiveEliminateDeadConstantTest, + ::testing::ValuesIn(std::vector({ // clang-format off // Long Def-Use chain with binary operations. { @@ -5109,6 +5111,43 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } +TEST_F(AggressiveDCETest, DeadDecorationGroupAndValidDecorationMgr) { + // The decoration group should be eliminated because the target of group + // decorate is dead. + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpDecorate %1 Restrict +OpDecorate %1 Aliased +%1 = OpDecorationGroup +OpGroupDecorate %1 %var +%void = OpTypeVoid +%func = OpTypeFunction %void +%uint = OpTypeInt 32 0 +%uint_ptr = OpTypePointer Function %uint +%main = OpFunction %void None %func +%2 = OpLabel +%var = OpVariable %uint_ptr Function +OpReturn +OpFunctionEnd + )"; + + auto pass = MakeUnique(); + auto consumer = [](spv_message_level_t, const char*, const spv_position_t&, + const char* message) { + std::cerr << message << std::endl; + }; + auto context = BuildModule(SPV_ENV_UNIVERSAL_1_1, consumer, text); + + // Build the decoration manager before the pass. + context->get_decoration_mgr(); + + const auto status = pass->Run(context.get()); + EXPECT_EQ(status, Pass::Status::SuccessWithChange); +} + TEST_F(AggressiveDCETest, ParitallyDeadDecorationGroup) { const std::string text = R"( ; CHECK: OpDecorate [[grp:%\w+]] Restrict @@ -5209,7 +5248,7 @@ OpFunctionEnd TEST_F(AggressiveDCETest, PartiallyDeadGroupMemberDecorate) { const std::string text = R"( ; CHECK: OpDecorate [[grp:%\w+]] Offset 0 -; CHECK: OpDecorate [[grp]] Uniform +; CHECK: OpDecorate [[grp]] RelaxedPrecision ; CHECK: [[grp]] = OpDecorationGroup ; CHECK: OpGroupMemberDecorate [[grp]] [[output:%\w+]] 1 ; CHECK: [[output]] = OpTypeStruct @@ -5219,7 +5258,7 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %output OpExecutionMode %main OriginUpperLeft OpDecorate %1 Offset 0 -OpDecorate %1 Uniform +OpDecorate %1 RelaxedPrecision %1 = OpDecorationGroup OpGroupMemberDecorate %1 %var_struct 0 %output_struct 1 %void = OpTypeVoid @@ -5248,7 +5287,7 @@ TEST_F(AggressiveDCETest, PartiallyDeadGroupMemberDecorateDifferentGroupDecorate) { const std::string text = R"( ; CHECK: OpDecorate [[grp:%\w+]] Offset 0 -; CHECK: OpDecorate [[grp]] Uniform +; CHECK: OpDecorate [[grp]] RelaxedPrecision ; CHECK: [[grp]] = OpDecorationGroup ; CHECK: OpGroupMemberDecorate [[grp]] [[output:%\w+]] 1 ; CHECK-NOT: OpGroupMemberDecorate @@ -5259,7 +5298,7 @@ OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %output OpExecutionMode %main OriginUpperLeft OpDecorate %1 Offset 0 -OpDecorate %1 Uniform +OpDecorate %1 RelaxedPrecision %1 = OpDecorationGroup OpGroupMemberDecorate %1 %var_struct 0 OpGroupMemberDecorate %1 %output_struct 1 @@ -5309,7 +5348,6 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE // Test for #1214 TEST_F(AggressiveDCETest, LoopHeaderIsAlsoAnotherLoopMerge) { @@ -5523,6 +5561,7 @@ TEST_F(AggressiveDCETest, SafelyRemoveDecorateString) { OpExtension "SPV_GOOGLE_hlsl_functionality1" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft )"; const std::string body_before = @@ -5812,6 +5851,369 @@ OpFunctionEnd SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); SinglePassRunAndCheck(test, test, true, true); } + +TEST_F(AggressiveDCETest, CountingLoopNotEliminated) { + // #version 310 es + // + // precision highp float; + // precision highp int; + // + // layout(location = 0) out vec4 _GLF_color; + // + // void main() + // { + // float data[1]; + // for (int c = 0; c < 1; c++) { + // if (true) { + // do { + // for (int i = 0; i < 1; i++) { + // data[i] = 1.0; + // } + // } while (false); + // } + // } + // _GLF_color = vec4(data[0], 0.0, 0.0, 1.0); + // } + const std::string test = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" %_GLF_color +OpExecutionMode %main OriginUpperLeft +OpSource ESSL 310 +OpName %main "main" +OpName %c "c" +OpName %i "i" +OpName %data "data" +OpName %_GLF_color "_GLF_color" +OpDecorate %_GLF_color Location 0 +%void = OpTypeVoid +%8 = OpTypeFunction %void +%int = OpTypeInt 32 1 +%_ptr_Function_int = OpTypePointer Function %int +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%bool = OpTypeBool +%float = OpTypeFloat 32 +%uint = OpTypeInt 32 0 +%uint_1 = OpConstant %uint 1 +%_arr_float_uint_1 = OpTypeArray %float %uint_1 +%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1 +%float_1 = OpConstant %float 1 +%_ptr_Function_float = OpTypePointer Function %float +%false = OpConstantFalse %bool +%v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_GLF_color = OpVariable %_ptr_Output_v4float Output +%float_0 = OpConstant %float 0 +%main = OpFunction %void None %8 +%26 = OpLabel +%c = OpVariable %_ptr_Function_int Function +%i = OpVariable %_ptr_Function_int Function +%data = OpVariable %_ptr_Function__arr_float_uint_1 Function +OpStore %c %int_0 +OpBranch %27 +%27 = OpLabel +OpLoopMerge %28 %29 None +OpBranch %30 +%30 = OpLabel +%31 = OpLoad %int %c +%32 = OpSLessThan %bool %31 %int_1 +OpBranchConditional %32 %33 %28 +%33 = OpLabel +OpBranch %34 +%34 = OpLabel +OpBranch %35 +%35 = OpLabel +OpLoopMerge %36 %37 None +OpBranch %38 +%38 = OpLabel +OpStore %i %int_0 +OpBranch %39 +%39 = OpLabel +OpLoopMerge %40 %41 None +OpBranch %42 +%42 = OpLabel +%43 = OpLoad %int %i +%44 = OpSLessThan %bool %43 %int_1 +OpSelectionMerge %45 None +OpBranchConditional %44 %46 %40 +%46 = OpLabel +%47 = OpLoad %int %i +%48 = OpAccessChain %_ptr_Function_float %data %47 +OpStore %48 %float_1 +OpBranch %41 +%41 = OpLabel +%49 = OpLoad %int %i +%50 = OpIAdd %int %49 %int_1 +OpStore %i %50 +OpBranch %39 +%40 = OpLabel +OpBranch %37 +%37 = OpLabel +OpBranchConditional %false %35 %36 +%36 = OpLabel +OpBranch %45 +%45 = OpLabel +OpBranch %29 +%29 = OpLabel +%51 = OpLoad %int %c +%52 = OpIAdd %int %51 %int_1 +OpStore %c %52 +OpBranch %27 +%28 = OpLabel +%53 = OpAccessChain %_ptr_Function_float %data %int_0 +%54 = OpLoad %float %53 +%55 = OpCompositeConstruct %v4float %54 %float_0 %float_0 %float_1 +OpStore %_GLF_color %55 +OpReturn +OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck(test, test, true, true); +} + +TEST_F(AggressiveDCETest, EliminateLoopWithUnreachable) { + // #version 430 + // + // layout(std430) buffer U_t + // { + // float g_F[10]; + // float g_S; + // }; + // + // layout(location = 0)out float o; + // + // void main(void) + // { + // // Useless loop + // for (int i = 0; i<10; i++) { + // if (g_F[i] == 0.0) + // break; + // else + // break; + // // Unreachable merge block created here. + // // Need to edit SPIR-V to change to OpUnreachable + // } + // o = g_S; + // } + + const std::string before = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" %o +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 430 +OpName %main "main" +OpName %i "i" +OpName %U_t "U_t" +OpMemberName %U_t 0 "g_F" +OpMemberName %U_t 1 "g_S" +OpName %_ "" +OpName %o "o" +OpDecorate %_arr_float_uint_10 ArrayStride 4 +OpMemberDecorate %U_t 0 Offset 0 +OpMemberDecorate %U_t 1 Offset 40 +OpDecorate %U_t BufferBlock +OpDecorate %_ DescriptorSet 0 +OpDecorate %o Location 0 +%void = OpTypeVoid +%9 = OpTypeFunction %void +%int = OpTypeInt 32 1 +%_ptr_Function_int = OpTypePointer Function %int +%int_0 = OpConstant %int 0 +%int_10 = OpConstant %int 10 +%bool = OpTypeBool +%float = OpTypeFloat 32 +%uint = OpTypeInt 32 0 +%uint_10 = OpConstant %uint 10 +%_arr_float_uint_10 = OpTypeArray %float %uint_10 +%U_t = OpTypeStruct %_arr_float_uint_10 %float +%_ptr_Uniform_U_t = OpTypePointer Uniform %U_t +%_ = OpVariable %_ptr_Uniform_U_t Uniform +%_ptr_Uniform_float = OpTypePointer Uniform %float +%float_0 = OpConstant %float 0 +%int_1 = OpConstant %int 1 +%_ptr_Output_float = OpTypePointer Output %float +%o = OpVariable %_ptr_Output_float Output +%main = OpFunction %void None %9 +%23 = OpLabel +%i = OpVariable %_ptr_Function_int Function +OpStore %i %int_0 +OpBranch %24 +%24 = OpLabel +OpLoopMerge %25 %26 None +OpBranch %27 +%27 = OpLabel +%28 = OpLoad %int %i +%29 = OpSLessThan %bool %28 %int_10 +OpBranchConditional %29 %30 %25 +%30 = OpLabel +%31 = OpLoad %int %i +%32 = OpAccessChain %_ptr_Uniform_float %_ %int_0 %31 +%33 = OpLoad %float %32 +%34 = OpFOrdEqual %bool %33 %float_0 +OpSelectionMerge %35 None +OpBranchConditional %34 %36 %37 +%36 = OpLabel +OpBranch %25 +%37 = OpLabel +OpBranch %25 +%35 = OpLabel +OpUnreachable +%26 = OpLabel +%38 = OpLoad %int %i +%39 = OpIAdd %int %38 %int_1 +OpStore %i %39 +OpBranch %24 +%25 = OpLabel +%40 = OpAccessChain %_ptr_Uniform_float %_ %int_1 +%41 = OpLoad %float %40 +OpStore %o %41 +OpReturn +OpFunctionEnd +)"; + + const std::string after = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" %o +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 430 +OpName %main "main" +OpName %U_t "U_t" +OpMemberName %U_t 0 "g_F" +OpMemberName %U_t 1 "g_S" +OpName %_ "" +OpName %o "o" +OpDecorate %_arr_float_uint_10 ArrayStride 4 +OpMemberDecorate %U_t 0 Offset 0 +OpMemberDecorate %U_t 1 Offset 40 +OpDecorate %U_t BufferBlock +OpDecorate %_ DescriptorSet 0 +OpDecorate %o Location 0 +%void = OpTypeVoid +%9 = OpTypeFunction %void +%int = OpTypeInt 32 1 +%float = OpTypeFloat 32 +%uint = OpTypeInt 32 0 +%uint_10 = OpConstant %uint 10 +%_arr_float_uint_10 = OpTypeArray %float %uint_10 +%U_t = OpTypeStruct %_arr_float_uint_10 %float +%_ptr_Uniform_U_t = OpTypePointer Uniform %U_t +%_ = OpVariable %_ptr_Uniform_U_t Uniform +%_ptr_Uniform_float = OpTypePointer Uniform %float +%int_1 = OpConstant %int 1 +%_ptr_Output_float = OpTypePointer Output %float +%o = OpVariable %_ptr_Output_float Output +%main = OpFunction %void None %9 +%23 = OpLabel +OpBranch %24 +%24 = OpLabel +OpBranch %25 +%25 = OpLabel +%40 = OpAccessChain %_ptr_Uniform_float %_ %int_1 +%41 = OpLoad %float %40 +OpStore %o %41 +OpReturn +OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck(before, after, true, true); +} + +TEST_F(AggressiveDCETest, DeadHlslCounterBufferGOOGLE) { + // We are able to remove "local2" because it is not loaded, but have to keep + // the stores to "local1". + const std::string test = + R"( +; CHECK-NOT: OpDecorateId +; CHECK: [[var:%\w+]] = OpVariable +; CHECK-NOT: OpVariable +; CHECK: [[ac:%\w+]] = OpAccessChain {{%\w+}} [[var]] +; CHECK: OpStore [[ac]] + OpCapability Shader + OpExtension "SPV_GOOGLE_hlsl_functionality1" + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %1 "main" + OpExecutionMode %1 LocalSize 32 1 1 + OpSource HLSL 600 + OpDecorate %_runtimearr_v2float ArrayStride 8 + OpMemberDecorate %_struct_3 0 Offset 0 + OpDecorate %_struct_3 BufferBlock + OpMemberDecorate %_struct_4 0 Offset 0 + OpDecorate %_struct_4 BufferBlock + OpDecorateId %5 HlslCounterBufferGOOGLE %6 + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %6 DescriptorSet 0 + OpDecorate %6 Binding 1 + %float = OpTypeFloat 32 + %v2float = OpTypeVector %float 2 +%_runtimearr_v2float = OpTypeRuntimeArray %v2float + %_struct_3 = OpTypeStruct %_runtimearr_v2float +%_ptr_Uniform__struct_3 = OpTypePointer Uniform %_struct_3 + %int = OpTypeInt 32 1 + %_struct_4 = OpTypeStruct %int +%_ptr_Uniform__struct_4 = OpTypePointer Uniform %_struct_4 + %void = OpTypeVoid + %13 = OpTypeFunction %void + %19 = OpConstantNull %v2float + %int_0 = OpConstant %int 0 +%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float + %5 = OpVariable %_ptr_Uniform__struct_3 Uniform + %6 = OpVariable %_ptr_Uniform__struct_4 Uniform + %1 = OpFunction %void None %13 + %22 = OpLabel + %23 = OpAccessChain %_ptr_Uniform_v2float %5 %int_0 %int_0 + OpStore %23 %19 + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(test, true); +} + +TEST_F(AggressiveDCETest, Dead) { + // We are able to remove "local2" because it is not loaded, but have to keep + // the stores to "local1". + const std::string test = + R"( +; CHECK: OpCapability +; CHECK-NOT: OpMemberDecorateStringGOOGLE +; CHECK: OpFunctionEnd + OpCapability Shader + OpExtension "SPV_GOOGLE_hlsl_functionality1" + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %VSMain "VSMain" + OpSource HLSL 500 + OpName %VSMain "VSMain" + OpName %PSInput "PSInput" + OpMemberName %PSInput 0 "Pos" + OpMemberName %PSInput 1 "uv" + OpMemberDecorateStringGOOGLE %PSInput 0 HlslSemanticGOOGLE "SV_POSITION" + OpMemberDecorateStringGOOGLE %PSInput 1 HlslSemanticGOOGLE "TEX_COORD" + %void = OpTypeVoid + %5 = OpTypeFunction %void + %float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%PSInput = OpTypeStruct %v4float %v2float + %VSMain = OpFunction %void None %5 + %9 = OpLabel + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(test, true); +} // TODO(greg-lunarg): Add tests to verify handling of these cases: // // Check that logical addressing required diff --git a/3rdparty/spirv-tools/test/opt/block_merge_test.cpp b/3rdparty/spirv-tools/test/opt/block_merge_test.cpp index aaa70cd4a..654e88019 100644 --- a/3rdparty/spirv-tools/test/opt/block_merge_test.cpp +++ b/3rdparty/spirv-tools/test/opt/block_merge_test.cpp @@ -273,7 +273,6 @@ OpFunctionEnd true); } -#ifdef SPIRV_EFFCEE TEST_F(BlockMergeTest, PhiInSuccessorOfMergedBlock) { const std::string text = R"( ; CHECK: OpSelectionMerge [[merge:%\w+]] None @@ -287,6 +286,7 @@ TEST_F(BlockMergeTest, PhiInSuccessorOfMergedBlock) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -324,6 +324,7 @@ TEST_F(BlockMergeTest, UpdateMergeInstruction) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -358,6 +359,7 @@ TEST_F(BlockMergeTest, TwoMergeBlocksCannotBeMerged) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -398,6 +400,7 @@ TEST_F(BlockMergeTest, MergeContinue) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -431,6 +434,7 @@ TEST_F(BlockMergeTest, TwoHeadersCannotBeMerged) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -532,6 +536,7 @@ TEST_F(BlockMergeTest, DontMergeKill) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %functy = OpTypeFunction %void @@ -564,6 +569,7 @@ TEST_F(BlockMergeTest, DontMergeUnreachable) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %functy = OpTypeFunction %void @@ -596,6 +602,7 @@ TEST_F(BlockMergeTest, DontMergeReturn) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %functy = OpTypeFunction %void @@ -628,6 +635,7 @@ TEST_F(BlockMergeTest, DontMergeSwitch) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %int = OpTypeInt 32 1 @@ -664,6 +672,7 @@ TEST_F(BlockMergeTest, DontMergeReturnValue) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %functy = OpTypeFunction %void @@ -691,7 +700,46 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE + +TEST_F(BlockMergeTest, MergeHeaders) { + // Merge two headers when the second is the merge block of the first. + const std::string text = R"( +; CHECK: OpFunction +; CHECK-NEXT: OpLabel +; CHECK-NEXT: OpBranch [[header:%\w+]] +; CHECK-NEXT: [[header]] = OpLabel +; CHECK-NEXT: OpSelectionMerge [[merge:%\w+]] +; CHECK: [[merge]] = OpLabel +; CHEKC: OpReturn +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%bool = OpTypeBool +%functy = OpTypeFunction %void +%otherfuncty = OpTypeFunction %bool +%true = OpConstantTrue %bool +%func = OpFunction %void None %functy +%1 = OpLabel +OpBranch %5 +%5 = OpLabel +OpLoopMerge %8 %7 None +OpBranch %8 +%7 = OpLabel +OpBranch %5 +%8 = OpLabel +OpSelectionMerge %m None +OpBranchConditional %true %a %m +%a = OpLabel +OpBranch %m +%m = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} // TODO(greg-lunarg): Add tests to verify handling of these cases: // diff --git a/3rdparty/spirv-tools/test/opt/ccp_test.cpp b/3rdparty/spirv-tools/test/opt/ccp_test.cpp index 5ccea71fb..20d883b0a 100644 --- a/3rdparty/spirv-tools/test/opt/ccp_test.cpp +++ b/3rdparty/spirv-tools/test/opt/ccp_test.cpp @@ -26,8 +26,6 @@ namespace { using CCPTest = PassTest<::testing::Test>; -// TODO(dneto): Add Effcee as required dependency, and make this unconditional. -#ifdef SPIRV_EFFCEE TEST_F(CCPTest, PropagateThroughPhis) { const std::string spv_asm = R"( OpCapability Shader @@ -589,6 +587,7 @@ TEST_F(CCPTest, UpdateSubsequentPhisToVarying) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" %in +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %int = OpTypeInt 32 1 @@ -743,6 +742,7 @@ TEST_F(CCPTest, NullBranchCondition) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %int = OpTypeInt 32 1 @@ -774,6 +774,7 @@ TEST_F(CCPTest, UndefBranchCondition) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %int = OpTypeInt 32 1 @@ -805,6 +806,7 @@ TEST_F(CCPTest, NullSwitchCondition) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %int = OpTypeInt 32 1 %null = OpConstantNull %int @@ -835,6 +837,7 @@ TEST_F(CCPTest, UndefSwitchCondition) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %int = OpTypeInt 32 1 %undef = OpUndef %int @@ -865,6 +868,7 @@ TEST_F(CCPTest, CompositeConstructOfGlobalValue) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" %in +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %int = OpTypeInt 32 1 %bool = OpTypeBool @@ -891,7 +895,6 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } -#endif } // namespace } // namespace opt diff --git a/3rdparty/spirv-tools/test/opt/cfg_cleanup_test.cpp b/3rdparty/spirv-tools/test/opt/cfg_cleanup_test.cpp index 369c76670..3498f00bb 100644 --- a/3rdparty/spirv-tools/test/opt/cfg_cleanup_test.cpp +++ b/3rdparty/spirv-tools/test/opt/cfg_cleanup_test.cpp @@ -91,6 +91,7 @@ TEST_F(CFGCleanupTest, RemoveDecorations) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %x "x" OpName %dead "dead" @@ -123,6 +124,7 @@ TEST_F(CFGCleanupTest, RemoveDecorations) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %x "x" OpDecorate %x RelaxedPrecision @@ -153,6 +155,7 @@ TEST_F(CFGCleanupTest, UpdatePhis) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %y %outparm + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %y "y" OpName %outparm "outparm" @@ -194,6 +197,7 @@ TEST_F(CFGCleanupTest, UpdatePhis) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %y %outparm +OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %y "y" OpName %outparm "outparm" @@ -272,6 +276,7 @@ TEST_F(CFGCleanupTest, RemovePhiArgsFromFarBlocks) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %y %outparm + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %y "y" OpName %outparm "outparm" @@ -319,6 +324,7 @@ TEST_F(CFGCleanupTest, RemovePhiArgsFromFarBlocks) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %y %outparm +OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %y "y" OpName %outparm "outparm" @@ -370,6 +376,7 @@ TEST_F(CFGCleanupTest, RemovePhiConstantArgs) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %y %outparm + OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %y "y" OpName %outparm "outparm" @@ -410,6 +417,7 @@ TEST_F(CFGCleanupTest, RemovePhiConstantArgs) { %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %y %outparm +OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %y "y" OpName %outparm "outparm" diff --git a/3rdparty/spirv-tools/test/opt/combine_access_chains_test.cpp b/3rdparty/spirv-tools/test/opt/combine_access_chains_test.cpp index ab9e185b6..aed14c9de 100644 --- a/3rdparty/spirv-tools/test/opt/combine_access_chains_test.cpp +++ b/3rdparty/spirv-tools/test/opt/combine_access_chains_test.cpp @@ -25,7 +25,6 @@ namespace { using CombineAccessChainsTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(CombineAccessChainsTest, PtrAccessChainFromAccessChainConstant) { const std::string text = R"( ; CHECK: [[int:%\w+]] = OpTypeInt 32 0 @@ -38,6 +37,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -71,6 +71,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -104,6 +105,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -139,6 +141,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -177,6 +180,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -219,6 +223,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -255,6 +260,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -289,6 +295,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -326,6 +333,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -361,6 +369,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -399,6 +408,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -435,6 +445,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -468,6 +479,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -505,6 +517,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -543,6 +556,7 @@ OpCapability Addresses OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -579,6 +593,7 @@ OpCapability Addresses OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -616,6 +631,7 @@ OpCapability Addresses OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -646,6 +662,7 @@ TEST_F(CombineAccessChainsTest, NoIndexAccessChains) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %ptr_Workgroup_uint = OpTypePointer Workgroup %uint @@ -673,6 +690,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -700,6 +718,7 @@ OpCapability VariablePointers OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %uint_0 = OpConstant %uint 0 @@ -729,6 +748,7 @@ OpCapability Addresses OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %uint = OpTypeInt 32 0 %int = OpTypeInt 32 1 @@ -747,7 +767,6 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE } // namespace } // namespace opt diff --git a/3rdparty/spirv-tools/test/opt/common_uniform_elim_test.cpp b/3rdparty/spirv-tools/test/opt/common_uniform_elim_test.cpp index f5199ed87..9e3943961 100644 --- a/3rdparty/spirv-tools/test/opt/common_uniform_elim_test.cpp +++ b/3rdparty/spirv-tools/test/opt/common_uniform_elim_test.cpp @@ -1219,7 +1219,6 @@ OpFunctionEnd predefs + after, true, true); } -#ifdef SPIRV_EFFCEE TEST_F(CommonUniformElimTest, MixedConstantAndNonConstantIndexes) { const std::string text = R"( ; CHECK: [[var:%\w+]] = OpVariable {{%\w+}} Uniform @@ -1329,7 +1328,61 @@ TEST_F(CommonUniformElimTest, MixedConstantAndNonConstantIndexes) { SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE + +TEST_F(CommonUniformElimTest, LoadPlacedAfterPhi) { + const std::string text = R"( +; CHECK: [[var:%\w+]] = OpVariable {{%\w+}} Uniform +; CHECK: OpSelectionMerge [[merge:%\w+]] +; CHECK: [[merge]] = OpLabel +; CHECK-NEXT: OpPhi +; CHECK-NEXT: OpLoad {{%\w+}} [[var]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %_struct_3 0 Offset 0 + OpDecorate %_struct_3 Block + OpDecorate %4 DescriptorSet 0 + OpDecorate %4 Binding 0 + %void = OpTypeVoid + %6 = OpTypeFunction %void + %bool = OpTypeBool + %false = OpConstantFalse %bool + %uint = OpTypeInt 32 0 + %v2uint = OpTypeVector %uint 2 + %_struct_3 = OpTypeStruct %v2uint +%_ptr_Uniform__struct_3 = OpTypePointer Uniform %_struct_3 + %4 = OpVariable %_ptr_Uniform__struct_3 Uniform + %uint_0 = OpConstant %uint 0 +%_ptr_Uniform_uint = OpTypePointer Uniform %uint + %uint_2 = OpConstant %uint 2 + %2 = OpFunction %void None %6 + %15 = OpLabel + OpSelectionMerge %16 None + OpBranchConditional %false %17 %16 + %17 = OpLabel + OpBranch %16 + %16 = OpLabel + %18 = OpPhi %bool %false %15 %false %17 + OpSelectionMerge %19 None + OpBranchConditional %false %20 %21 + %20 = OpLabel + %22 = OpAccessChain %_ptr_Uniform_uint %4 %uint_0 %uint_0 + %23 = OpLoad %uint %22 + OpBranch %19 + %21 = OpLabel + OpBranch %19 + %19 = OpLabel + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(text, true); +} + // TODO(greg-lunarg): Add tests to verify handling of these cases: // // Disqualifying cases: extensions, decorations, non-logical addressing, diff --git a/3rdparty/spirv-tools/test/opt/copy_prop_array_test.cpp b/3rdparty/spirv-tools/test/opt/copy_prop_array_test.cpp index dcce77d22..504ae67e1 100644 --- a/3rdparty/spirv-tools/test/opt/copy_prop_array_test.cpp +++ b/3rdparty/spirv-tools/test/opt/copy_prop_array_test.cpp @@ -25,7 +25,6 @@ namespace { using CopyPropArrayPassTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(CopyPropArrayPassTest, BasicPropagateArray) { const std::string before = R"( @@ -431,7 +430,7 @@ TEST_F(CopyPropArrayPassTest, DecomposeObjectForArrayStore) { ; CHECK: [[extract1:%\w+]] = OpCompositeExtract %v4float [[load]] 0 ; CHECK: [[extract2:%\w+]] = OpCompositeExtract %v4float [[load]] 1 ; CHECK: [[construct:%\w+]] = OpCompositeConstruct %_arr_v4float_uint_2_0 [[extract1]] [[extract2]] -; CHEKC: OpStore %26 [[construct]] +; CHECK: OpStore %26 [[construct]] OpStore %26 %41 %42 = OpAccessChain %_ptr_Function_v4float %26 %28 %43 = OpLoad %v4float %42 @@ -519,7 +518,7 @@ TEST_F(CopyPropArrayPassTest, DecomposeObjectForStructStore) { ; CHECK: [[extract1:%\w+]] = OpCompositeExtract %float [[load]] 0 ; CHECK: [[extract2:%\w+]] = OpCompositeExtract %uint [[load]] 1 ; CHECK: [[construct:%\w+]] = OpCompositeConstruct [[struct]] [[extract1]] [[extract2]] -; CHEKC: OpStore %26 [[construct]] +; CHECK: OpStore %26 [[construct]] OpStore %26 %41 %42 = OpAccessChain %_ptr_Function_v4float %26 %28 %43 = OpLoad %v4float %42 @@ -620,8 +619,314 @@ OpFunctionEnd SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES); SinglePassRunAndMatch(before, false); } -#endif // SPIRV_EFFCEE +TEST_F(CopyPropArrayPassTest, IsomorphicTypes1) { + const std::string before = + R"( +; CHECK: [[int:%\w+]] = OpTypeInt 32 0 +; CHECK: [[s1:%\w+]] = OpTypeStruct [[int]] +; CHECK: [[s2:%\w+]] = OpTypeStruct [[s1]] +; CHECK: [[a1:%\w+]] = OpTypeArray [[s2]] +; CHECK: [[s3:%\w+]] = OpTypeStruct [[a1]] +; CHECK: [[p_s3:%\w+]] = OpTypePointer Uniform [[s3]] +; CHECK: [[global_var:%\w+]] = OpVariable [[p_s3]] Uniform +; CHECK: [[p_a1:%\w+]] = OpTypePointer Uniform [[a1]] +; CHECK: [[p_s2:%\w+]] = OpTypePointer Uniform [[s2]] +; CHECK: [[ac1:%\w+]] = OpAccessChain [[p_a1]] [[global_var]] %uint_0 +; CHECK: [[ac2:%\w+]] = OpAccessChain [[p_s2]] [[ac1]] %uint_0 +; CHECK: [[ld:%\w+]] = OpLoad [[s2]] [[ac2]] +; CHECK: [[ex:%\w+]] = OpCompositeExtract [[s1]] [[ld]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "PS_main" + OpExecutionMode %2 OriginUpperLeft + OpSource HLSL 600 + OpDecorate %3 DescriptorSet 0 + OpDecorate %3 Binding 101 + %uint = OpTypeInt 32 0 + %uint_1 = OpConstant %uint 1 + %s1 = OpTypeStruct %uint + %s2 = OpTypeStruct %s1 +%a1 = OpTypeArray %s2 %uint_1 + %s3 = OpTypeStruct %a1 + %s1_1 = OpTypeStruct %uint +%_ptr_Uniform_uint = OpTypePointer Uniform %uint + %void = OpTypeVoid + %13 = OpTypeFunction %void + %uint_0 = OpConstant %uint 0 + %s1_0 = OpTypeStruct %uint + %s2_0 = OpTypeStruct %s1_0 +%a1_0 = OpTypeArray %s2_0 %uint_1 + %s3_0 = OpTypeStruct %a1_0 +%p_s3 = OpTypePointer Uniform %s3 +%p_s3_0 = OpTypePointer Function %s3_0 + %3 = OpVariable %p_s3 Uniform +%p_a1_0 = OpTypePointer Function %a1_0 +%p_s2_0 = OpTypePointer Function %s2_0 + %2 = OpFunction %void None %13 + %20 = OpLabel + %21 = OpVariable %p_a1_0 Function + %22 = OpLoad %s3 %3 + %23 = OpCompositeExtract %a1 %22 0 + %24 = OpCompositeExtract %s2 %23 0 + %25 = OpCompositeExtract %s1 %24 0 + %26 = OpCompositeExtract %uint %25 0 + %27 = OpCompositeConstruct %s1_0 %26 + %32 = OpCompositeConstruct %s2_0 %27 + %28 = OpCompositeConstruct %a1_0 %32 + OpStore %21 %28 + %29 = OpAccessChain %p_s2_0 %21 %uint_0 + %30 = OpLoad %s2 %29 + %31 = OpCompositeExtract %s1 %30 0 + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER | + SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES); + SinglePassRunAndMatch(before, false); +} + +TEST_F(CopyPropArrayPassTest, IsomorphicTypes2) { + const std::string before = + R"( +; CHECK: [[int:%\w+]] = OpTypeInt 32 0 +; CHECK: [[s1:%\w+]] = OpTypeStruct [[int]] +; CHECK: [[s2:%\w+]] = OpTypeStruct [[s1]] +; CHECK: [[a1:%\w+]] = OpTypeArray [[s2]] +; CHECK: [[s3:%\w+]] = OpTypeStruct [[a1]] +; CHECK: [[p_s3:%\w+]] = OpTypePointer Uniform [[s3]] +; CHECK: [[global_var:%\w+]] = OpVariable [[p_s3]] Uniform +; CHECK: [[p_s2:%\w+]] = OpTypePointer Uniform [[s2]] +; CHECK: [[p_s1:%\w+]] = OpTypePointer Uniform [[s1]] +; CHECK: [[ac1:%\w+]] = OpAccessChain [[p_s2]] [[global_var]] %uint_0 %uint_0 +; CHECK: [[ac2:%\w+]] = OpAccessChain [[p_s1]] [[ac1]] %uint_0 +; CHECK: [[ld:%\w+]] = OpLoad [[s1]] [[ac2]] +; CHECK: [[ex:%\w+]] = OpCompositeExtract [[int]] [[ld]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "PS_main" + OpExecutionMode %2 OriginUpperLeft + OpSource HLSL 600 + OpDecorate %3 DescriptorSet 0 + OpDecorate %3 Binding 101 + %uint = OpTypeInt 32 0 + %uint_1 = OpConstant %uint 1 + %_struct_6 = OpTypeStruct %uint + %_struct_7 = OpTypeStruct %_struct_6 +%_arr__struct_7_uint_1 = OpTypeArray %_struct_7 %uint_1 + %_struct_9 = OpTypeStruct %_arr__struct_7_uint_1 + %_struct_10 = OpTypeStruct %uint +%_ptr_Uniform_uint = OpTypePointer Uniform %uint + %void = OpTypeVoid + %13 = OpTypeFunction %void + %uint_0 = OpConstant %uint 0 + %_struct_15 = OpTypeStruct %uint +%_arr__struct_15_uint_1 = OpTypeArray %_struct_15 %uint_1 +%_ptr_Uniform__struct_9 = OpTypePointer Uniform %_struct_9 +%_ptr_Function__struct_15 = OpTypePointer Function %_struct_15 + %3 = OpVariable %_ptr_Uniform__struct_9 Uniform +%_ptr_Function__arr__struct_15_uint_1 = OpTypePointer Function %_arr__struct_15_uint_1 + %2 = OpFunction %void None %13 + %20 = OpLabel + %21 = OpVariable %_ptr_Function__arr__struct_15_uint_1 Function + %22 = OpLoad %_struct_9 %3 + %23 = OpCompositeExtract %_arr__struct_7_uint_1 %22 0 + %24 = OpCompositeExtract %_struct_7 %23 0 + %25 = OpCompositeExtract %_struct_6 %24 0 + %26 = OpCompositeExtract %uint %25 0 + %27 = OpCompositeConstruct %_struct_15 %26 + %28 = OpCompositeConstruct %_arr__struct_15_uint_1 %27 + OpStore %21 %28 + %29 = OpAccessChain %_ptr_Function__struct_15 %21 %uint_0 + %30 = OpLoad %_struct_15 %29 + %31 = OpCompositeExtract %uint %30 0 + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER | + SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES); + SinglePassRunAndMatch(before, false); +} + +TEST_F(CopyPropArrayPassTest, IsomorphicTypes3) { + const std::string before = + R"( +; CHECK: [[int:%\w+]] = OpTypeInt 32 0 +; CHECK: [[s1:%\w+]] = OpTypeStruct [[int]] +; CHECK: [[s2:%\w+]] = OpTypeStruct [[s1]] +; CHECK: [[a1:%\w+]] = OpTypeArray [[s2]] +; CHECK: [[s3:%\w+]] = OpTypeStruct [[a1]] +; CHECK: [[s1_1:%\w+]] = OpTypeStruct [[int]] +; CHECK: [[p_s3:%\w+]] = OpTypePointer Uniform [[s3]] +; CHECK: [[p_s1_1:%\w+]] = OpTypePointer Function [[s1_1]] +; CHECK: [[global_var:%\w+]] = OpVariable [[p_s3]] Uniform +; CHECK: [[p_s2:%\w+]] = OpTypePointer Uniform [[s2]] +; CHECK: [[p_s1:%\w+]] = OpTypePointer Uniform [[s1]] +; CHECK: [[var:%\w+]] = OpVariable [[p_s1_1]] Function +; CHECK: [[ac1:%\w+]] = OpAccessChain [[p_s2]] [[global_var]] %uint_0 %uint_0 +; CHECK: [[ac2:%\w+]] = OpAccessChain [[p_s1]] [[ac1]] %uint_0 +; CHECK: [[ld:%\w+]] = OpLoad [[s1]] [[ac2]] +; CHECK: [[ex:%\w+]] = OpCompositeExtract [[int]] [[ld]] +; CHECK: [[copy:%\w+]] = OpCompositeConstruct [[s1_1]] [[ex]] +; CHECK: OpStore [[var]] [[copy]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "PS_main" + OpExecutionMode %2 OriginUpperLeft + OpSource HLSL 600 + OpDecorate %3 DescriptorSet 0 + OpDecorate %3 Binding 101 + %uint = OpTypeInt 32 0 + %uint_1 = OpConstant %uint 1 + %_struct_6 = OpTypeStruct %uint + %_struct_7 = OpTypeStruct %_struct_6 +%_arr__struct_7_uint_1 = OpTypeArray %_struct_7 %uint_1 + %_struct_9 = OpTypeStruct %_arr__struct_7_uint_1 +%_ptr_Uniform_uint = OpTypePointer Uniform %uint + %void = OpTypeVoid + %13 = OpTypeFunction %void + %uint_0 = OpConstant %uint 0 + %_struct_15 = OpTypeStruct %uint + %_struct_10 = OpTypeStruct %uint +%_arr__struct_15_uint_1 = OpTypeArray %_struct_15 %uint_1 +%_ptr_Uniform__struct_9 = OpTypePointer Uniform %_struct_9 +%_ptr_Function__struct_15 = OpTypePointer Function %_struct_15 + %3 = OpVariable %_ptr_Uniform__struct_9 Uniform +%_ptr_Function__arr__struct_15_uint_1 = OpTypePointer Function %_arr__struct_15_uint_1 + %2 = OpFunction %void None %13 + %20 = OpLabel + %21 = OpVariable %_ptr_Function__arr__struct_15_uint_1 Function + %var = OpVariable %_ptr_Function__struct_15 Function + %22 = OpLoad %_struct_9 %3 + %23 = OpCompositeExtract %_arr__struct_7_uint_1 %22 0 + %24 = OpCompositeExtract %_struct_7 %23 0 + %25 = OpCompositeExtract %_struct_6 %24 0 + %26 = OpCompositeExtract %uint %25 0 + %27 = OpCompositeConstruct %_struct_15 %26 + %28 = OpCompositeConstruct %_arr__struct_15_uint_1 %27 + OpStore %21 %28 + %29 = OpAccessChain %_ptr_Function__struct_15 %21 %uint_0 + %30 = OpLoad %_struct_15 %29 + OpStore %var %30 + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER | + SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES); + SinglePassRunAndMatch(before, false); +} + +TEST_F(CopyPropArrayPassTest, BadMergingTwoObjects) { + // The second element in the |OpCompositeConstruct| is from a different + // object. + const std::string text = + R"(OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpName %type_ConstBuf "type.ConstBuf" +OpMemberName %type_ConstBuf 0 "TexSizeU" +OpMemberName %type_ConstBuf 1 "TexSizeV" +OpName %ConstBuf "ConstBuf" +OpName %main "main" +OpMemberDecorate %type_ConstBuf 0 Offset 0 +OpMemberDecorate %type_ConstBuf 1 Offset 8 +OpDecorate %type_ConstBuf Block +OpDecorate %ConstBuf DescriptorSet 0 +OpDecorate %ConstBuf Binding 2 +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%type_ConstBuf = OpTypeStruct %v2float %v2float +%_ptr_Uniform_type_ConstBuf = OpTypePointer Uniform %type_ConstBuf +%void = OpTypeVoid +%9 = OpTypeFunction %void +%uint = OpTypeInt 32 0 +%int_0 = OpConstant %uint 0 +%uint_2 = OpConstant %uint 2 +%_arr_v2float_uint_2 = OpTypeArray %v2float %uint_2 +%_ptr_Function__arr_v2float_uint_2 = OpTypePointer Function %_arr_v2float_uint_2 +%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float +%ConstBuf = OpVariable %_ptr_Uniform_type_ConstBuf Uniform +%main = OpFunction %void None %9 +%24 = OpLabel +%25 = OpVariable %_ptr_Function__arr_v2float_uint_2 Function +%27 = OpAccessChain %_ptr_Uniform_v2float %ConstBuf %int_0 +%28 = OpLoad %v2float %27 +%29 = OpAccessChain %_ptr_Uniform_v2float %ConstBuf %int_0 +%30 = OpLoad %v2float %29 +%31 = OpFNegate %v2float %30 +%37 = OpCompositeConstruct %_arr_v2float_uint_2 %28 %31 +OpStore %25 %37 +OpReturn +OpFunctionEnd +)"; + + auto result = SinglePassRunAndDisassemble( + text, /* skip_nop = */ true, /* do_validation = */ false); + EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); +} + +TEST_F(CopyPropArrayPassTest, SecondElementNotContained) { + // The second element in the |OpCompositeConstruct| is not a memory object. + // Make sure no change happends. + const std::string text = + R"(OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpName %type_ConstBuf "type.ConstBuf" +OpMemberName %type_ConstBuf 0 "TexSizeU" +OpMemberName %type_ConstBuf 1 "TexSizeV" +OpName %ConstBuf "ConstBuf" +OpName %main "main" +OpMemberDecorate %type_ConstBuf 0 Offset 0 +OpMemberDecorate %type_ConstBuf 1 Offset 8 +OpDecorate %type_ConstBuf Block +OpDecorate %ConstBuf DescriptorSet 0 +OpDecorate %ConstBuf Binding 2 +OpDecorate %ConstBuf2 DescriptorSet 1 +OpDecorate %ConstBuf2 Binding 2 +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%type_ConstBuf = OpTypeStruct %v2float %v2float +%_ptr_Uniform_type_ConstBuf = OpTypePointer Uniform %type_ConstBuf +%void = OpTypeVoid +%9 = OpTypeFunction %void +%uint = OpTypeInt 32 0 +%int_0 = OpConstant %uint 0 +%int_1 = OpConstant %uint 1 +%uint_2 = OpConstant %uint 2 +%_arr_v2float_uint_2 = OpTypeArray %v2float %uint_2 +%_ptr_Function__arr_v2float_uint_2 = OpTypePointer Function %_arr_v2float_uint_2 +%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float +%ConstBuf = OpVariable %_ptr_Uniform_type_ConstBuf Uniform +%ConstBuf2 = OpVariable %_ptr_Uniform_type_ConstBuf Uniform +%main = OpFunction %void None %9 +%24 = OpLabel +%25 = OpVariable %_ptr_Function__arr_v2float_uint_2 Function +%27 = OpAccessChain %_ptr_Uniform_v2float %ConstBuf %int_0 +%28 = OpLoad %v2float %27 +%29 = OpAccessChain %_ptr_Uniform_v2float %ConstBuf2 %int_1 +%30 = OpLoad %v2float %29 +%37 = OpCompositeConstruct %_arr_v2float_uint_2 %28 %30 +OpStore %25 %37 +OpReturn +OpFunctionEnd +)"; + + auto result = SinglePassRunAndDisassemble( + text, /* skip_nop = */ true, /* do_validation = */ false); + EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); +} // This test will place a load before the store. We cannot propagate in this // case. TEST_F(CopyPropArrayPassTest, LoadBeforeStore) { diff --git a/3rdparty/spirv-tools/test/opt/dead_branch_elim_test.cpp b/3rdparty/spirv-tools/test/opt/dead_branch_elim_test.cpp index 29084e3bb..66e3bddf7 100644 --- a/3rdparty/spirv-tools/test/opt/dead_branch_elim_test.cpp +++ b/3rdparty/spirv-tools/test/opt/dead_branch_elim_test.cpp @@ -1348,7 +1348,6 @@ OpFunctionEnd true, true); } -#ifdef SPIRV_EFFCEE TEST_F(DeadBranchElimTest, LeaveContinueBackedge) { const std::string text = R"( ; CHECK: OpLoopMerge [[merge:%\w+]] [[continue:%\w+]] None @@ -2018,6 +2017,7 @@ TEST_F(DeadBranchElimTest, ReorderBlocks) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -2045,6 +2045,7 @@ TEST_F(DeadBranchElimTest, ReorderBlocksMultiple) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -2073,6 +2074,7 @@ TEST_F(DeadBranchElimTest, ReorderBlocksMultiple2) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -2193,7 +2195,678 @@ OpFunctionEnd SinglePassRunAndMatch(predefs + body, true); } -#endif + +TEST_F(DeadBranchElimTest, SelectionMergeWithConditionalExit) { + // Checks that if a selection merge construct contains a conditional branch + // to the merge node, then we keep the OpSelectionMerge on that branch. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%uint = OpTypeInt 32 0 +%undef_int = OpUndef %uint +)"; + + const std::string body = + R"( +; CHECK: OpLoopMerge [[loop_merge:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSelectionMerge [[sel_merge:%\w+]] None +; CHECK-NEXT: OpSwitch {{%\w+}} [[sel_merge]] 1 [[bb3:%\w+]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpSwitch %undef_int %sel_merge 1 %bb3 +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoop) { + // Checks that if a selection merge construct contains a conditional branch + // to a loop surrounding the selection merge, then we do not keep the + // OpSelectionMerge instruction. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%undef_bool = OpUndef %bool +)"; + + const std::string body = + R"( +; CHECK: OpLoopMerge [[loop_merge:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[bb3:%\w+]] [[loop_merge]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge:%\w+]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpBranchConditional %undef_bool %bb3 %loop_merge +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoopContinue) { + // Checks that if a selection merge construct contains a conditional branch + // to continue of a loop surrounding the selection merge, then we do not keep + // the OpSelectionMerge instruction. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%undef_bool = OpUndef %bool +)"; + + const std::string body = + R"(; +; CHECK: OpLabel +; CHECK: [[loop_header:%\w+]] = OpLabel +; CHECK: OpLoopMerge [[loop_merge:%\w+]] [[loop_cont:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[bb3:%\w+]] [[loop_cont]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge:%\w+]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_cont]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_header]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpBranchConditional %undef_bool %bb3 %cont +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoop2) { + // Same as |SelectionMergeWithExitToLoop|, except the switch goes to the loop + // merge or the selection merge. In this case, we do not need an + // OpSelectionMerge either. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%undef_bool = OpUndef %bool +)"; + + const std::string body = + R"( +; CHECK: OpLoopMerge [[loop_merge:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[sel_merge:%\w+]] [[loop_merge]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpBranchConditional %undef_bool %sel_merge %loop_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoopContinue2) { + // Same as |SelectionMergeWithExitToLoopContinue|, except the branch goes to + // the loop continue or the selection merge. In this case, we do not need an + // OpSelectionMerge either. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%undef_bool = OpUndef %bool +)"; + + const std::string body = + R"( +; CHECK: OpLabel +; CHECK: [[loop_header:%\w+]] = OpLabel +; CHECK: OpLoopMerge [[loop_merge:%\w+]] [[loop_cont:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[sel_merge:%\w+]] [[loop_cont]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_cont]] = OpLabel +; CHECK: OpBranch [[loop_header]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpBranchConditional %undef_bool %sel_merge %cont +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoop3) { + // Checks that if a selection merge construct contains a conditional branch + // to the merge of a surrounding loop, the selection merge, and another block + // inside the selection merge, then we must keep the OpSelectionMerge + // instruction on that branch. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%uint = OpTypeInt 32 0 +%undef_int = OpUndef %uint +)"; + + const std::string body = + R"( +; CHECK: OpLoopMerge [[loop_merge:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSelectionMerge [[sel_merge:%\w+]] None +; CHECK-NEXT: OpSwitch {{%\w+}} [[sel_merge]] 0 [[loop_merge]] 1 [[bb3:%\w+]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpSwitch %undef_int %sel_merge 0 %loop_merge 1 %bb3 +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoopContinue3) { + // Checks that if a selection merge construct contains a conditional branch + // to the merge of a surrounding loop, the selection merge, and another block + // inside the selection merge, then we must keep the OpSelectionMerge + // instruction on that branch. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%uint = OpTypeInt 32 0 +%undef_int = OpUndef %uint +)"; + + const std::string body = + R"( +; CHECK: OpLabel +; CHECK: [[loop_header:%\w+]] = OpLabel +; CHECK: OpLoopMerge [[loop_merge:%\w+]] [[loop_continue:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSelectionMerge [[sel_merge:%\w+]] None +; CHECK-NEXT: OpSwitch {{%\w+}} [[sel_merge]] 0 [[loop_continue]] 1 [[bb3:%\w+]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_continue]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_header]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpSwitch %undef_int %sel_merge 0 %cont 1 %bb3 +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoop4) { + // Same as |SelectionMergeWithExitToLoop|, except the branch in the selection + // construct is an |OpSwitch| instead of an |OpConditionalBranch|. The + // OpSelectionMerge instruction is not needed in this case either. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%uint = OpTypeInt 32 0 +%undef_int = OpUndef %uint +)"; + + const std::string body = + R"( +; CHECK: OpLoopMerge [[loop_merge:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSwitch {{%\w+}} [[bb3:%\w+]] 0 [[loop_merge]] 1 [[bb3:%\w+]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge:%\w+]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpSwitch %undef_int %bb3 0 %loop_merge 1 %bb3 +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithExitToLoopContinue4) { + // Same as |SelectionMergeWithExitToLoopContinue|, except the branch in the + // selection construct is an |OpSwitch| instead of an |OpConditionalBranch|. + // The OpSelectionMerge instruction is not needed in this case either. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%uint = OpTypeInt 32 0 +%undef_int = OpUndef %uint +)"; + + const std::string body = + R"( +; CHECK: OpLoopMerge [[loop_merge:%\w+]] [[loop_cont:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSwitch {{%\w+}} [[bb3:%\w+]] 0 [[loop_cont]] 1 [[bb3:%\w+]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[sel_merge:%\w+]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %sel_merge None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpSwitch %undef_int %bb3 0 %cont 1 %bb3 +%bb3 = OpLabel +OpBranch %sel_merge +%bb4 = OpLabel +OpBranch %sel_merge +%sel_merge = OpLabel +OpBranch %loop_merge +%cont = OpLabel +OpBranch %loop_header +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeSameAsLoopContinue) { + // Same as |SelectionMergeWithExitToLoopContinue|, except the branch in the + // selection construct is an |OpSwitch| instead of an |OpConditionalBranch|. + // The OpSelectionMerge instruction is not needed in this case either. + const std::string predefs = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 140 +%void = OpTypeVoid +%func_type = OpTypeFunction %void +%bool = OpTypeBool +%true = OpConstantTrue %bool +%uint = OpTypeInt 32 0 +%undef_bool = OpUndef %bool +)"; + + const std::string body = + R"( +; CHECK: OpLabel +; CHECK: [[loop_header:%\w+]] = OpLabel +; CHECK: OpLoopMerge [[loop_merge:%\w+]] [[loop_cont:%\w+]] +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpBranch [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSelectionMerge [[loop_cont]] +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[bb3:%\w+]] [[loop_cont]] +; CHECK: [[bb3]] = OpLabel +; CHECK-NEXT: OpBranch [[loop_cont]] +; CHECK: [[loop_cont]] = OpLabel +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[loop_header]] [[loop_merge]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn +%main = OpFunction %void None %func_type +%entry_bb = OpLabel +OpBranch %loop_header +%loop_header = OpLabel +OpLoopMerge %loop_merge %cont None +OpBranch %bb1 +%bb1 = OpLabel +OpSelectionMerge %cont None +OpBranchConditional %true %bb2 %bb4 +%bb2 = OpLabel +OpBranchConditional %undef_bool %bb3 %cont +%bb3 = OpLabel +OpBranch %cont +%bb4 = OpLabel +OpBranch %cont +%cont = OpLabel +OpBranchConditional %undef_bool %loop_header %loop_merge +%loop_merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(predefs + body, true); +} + +TEST_F(DeadBranchElimTest, SelectionMergeWithNestedLoop) { + const std::string body = + R"( +; CHECK: OpSelectionMerge [[merge1:%\w+]] +; CHECK: [[merge1]] = OpLabel +; CHECK-NEXT: OpBranch [[preheader:%\w+]] +; CHECK: [[preheader]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpBranch [[header:%\w+]] +; CHECK: [[header]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpLoopMerge [[merge2:%\w+]] +; CHECK: [[merge2]] = OpLabel +; CHECK-NEXT: OpUnreachable + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %main "main" + OpExecutionMode %main OriginUpperLeft + OpSource ESSL 310 + OpName %main "main" + OpName %h "h" + OpName %i "i" + %void = OpTypeVoid + %3 = OpTypeFunction %void + %bool = OpTypeBool + %_ptr_Function_bool = OpTypePointer Function %bool + %true = OpConstantTrue %bool + %int = OpTypeInt 32 1 + %_ptr_Function_int = OpTypePointer Function %int + %int_1 = OpConstant %int 1 + %int_0 = OpConstant %int 0 + %27 = OpUndef %bool + %main = OpFunction %void None %3 + %5 = OpLabel + %h = OpVariable %_ptr_Function_bool Function + %i = OpVariable %_ptr_Function_int Function + OpSelectionMerge %11 None + OpBranchConditional %27 %10 %11 + %10 = OpLabel + OpBranch %11 + %11 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %true %13 %14 + %13 = OpLabel + OpStore %i %int_1 + OpBranch %19 + %19 = OpLabel + OpLoopMerge %21 %22 None + OpBranch %23 + %23 = OpLabel + %26 = OpSGreaterThan %bool %int_1 %int_0 + OpBranchConditional %true %20 %21 + %20 = OpLabel + OpBranch %22 + %22 = OpLabel + OpBranch %19 + %21 = OpLabel + OpBranch %14 + %14 = OpLabel + OpReturn + OpFunctionEnd +)"; + + SinglePassRunAndMatch(body, true); +} // TODO(greg-lunarg): Add tests to verify handling of these cases: // diff --git a/3rdparty/spirv-tools/test/opt/decoration_manager_test.cpp b/3rdparty/spirv-tools/test/opt/decoration_manager_test.cpp index cf82e8e66..f85ff6aa6 100644 --- a/3rdparty/spirv-tools/test/opt/decoration_manager_test.cpp +++ b/3rdparty/spirv-tools/test/opt/decoration_manager_test.cpp @@ -422,6 +422,7 @@ OpGroupDecorate %2 %1 %3 OpCapability Linkage OpMemoryModel Logical GLSL450 OpDecorate %1 Constant +%2 = OpDecorationGroup %4 = OpTypeInt 32 0 %1 = OpVariable %4 Uniform %3 = OpVariable %4 Uniform diff --git a/3rdparty/spirv-tools/test/opt/dominator_tree/CMakeLists.txt b/3rdparty/spirv-tools/test/opt/dominator_tree/CMakeLists.txt index f95a56da8..813d628a0 100644 --- a/3rdparty/spirv-tools/test/opt/dominator_tree/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/opt/dominator_tree/CMakeLists.txt @@ -27,4 +27,5 @@ add_spvtools_unittest(TARGET dominator_analysis unreachable_for.cpp unreachable_for_post.cpp LIBS SPIRV-Tools-opt + PCH_FILE pch_test_opt_dom ) diff --git a/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.cpp b/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.cpp new file mode 100644 index 000000000..a28310e57 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_test_opt_dom.h" diff --git a/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.h b/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.h new file mode 100644 index 000000000..4e8106fbf --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/dominator_tree/pch_test_opt_dom.h @@ -0,0 +1,25 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "gmock/gmock.h" +#include "source/opt/iterator.h" +#include "source/opt/loop_dependence.h" +#include "source/opt/loop_descriptor.h" +#include "source/opt/pass.h" +#include "source/opt/scalar_analysis.h" +#include "source/opt/tree_iterator.h" +#include "test/opt/assembly_builder.h" +#include "test/opt/function_utils.h" +#include "test/opt/pass_fixture.h" +#include "test/opt/pass_utils.h" diff --git a/3rdparty/spirv-tools/test/opt/flatten_decoration_test.cpp b/3rdparty/spirv-tools/test/opt/flatten_decoration_test.cpp index 483ee6e53..fcf2341e7 100644 --- a/3rdparty/spirv-tools/test/opt/flatten_decoration_test.cpp +++ b/3rdparty/spirv-tools/test/opt/flatten_decoration_test.cpp @@ -31,6 +31,7 @@ std::string PreambleAssembly() { R"(OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" %hue %saturation %value +OpExecutionMode %main OriginUpperLeft OpName %main "main" OpName %void_fn "void_fn" OpName %hue "hue" diff --git a/3rdparty/spirv-tools/test/opt/fold_test.cpp b/3rdparty/spirv-tools/test/opt/fold_test.cpp index b1e575886..1a5442181 100644 --- a/3rdparty/spirv-tools/test/opt/fold_test.cpp +++ b/3rdparty/spirv-tools/test/opt/fold_test.cpp @@ -17,6 +17,7 @@ #include #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "source/opt/build_module.h" @@ -27,17 +28,12 @@ #include "spirv-tools/libspirv.hpp" #include "test/opt/pass_utils.h" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { using ::testing::Contains; -#ifdef SPIRV_EFFCEE std::string Disassemble(const std::string& original, IRContext* context, uint32_t disassemble_options = 0) { std::vector optimized_bin; @@ -60,7 +56,6 @@ void Match(const std::string& original, IRContext* context, << match_result.message() << "\nChecking result:\n" << disassembly; } -#endif template struct InstructionFoldingCase { @@ -184,6 +179,7 @@ OpName %main "main" %uint_3 = OpConstant %uint 3 %uint_4 = OpConstant %uint 4 %uint_32 = OpConstant %uint 32 +%uint_42 = OpConstant %uint 42 %uint_max = OpConstant %uint 4294967295 %v2int_undef = OpUndef %v2int %v2int_0_0 = OpConstantComposite %v2int %int_0 %int_0 @@ -439,6 +435,76 @@ INSTANTIATE_TEST_CASE_P(TestCase, IntegerInstructionFoldingTest, "%2 = OpBitwiseAnd %uint %load %uint_0\n" + "OpReturn\n" + "OpFunctionEnd", + 2, 0), + // Test case 17: fold 1/0 (signed) + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%2 = OpSDiv %int %int_1 %int_0\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 18: fold 1/0 (unsigned) + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%2 = OpUDiv %uint %uint_1 %uint_0\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 19: fold OpSRem 1 0 (signed) + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%2 = OpSRem %int %int_1 %int_0\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 20: fold 1%0 (signed) + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%2 = OpSMod %int %int_1 %int_0\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 21: fold 1%0 (unsigned) + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%2 = OpUMod %uint %uint_1 %uint_0\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 22: fold unsigned n >> 42 (undefined, so set to zero). + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%n = OpVariable %_ptr_uint Function\n" + + "%load = OpLoad %uint %n\n" + + "%2 = OpShiftRightLogical %uint %load %uint_42\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 21: fold signed n >> 42 (undefined, so set to zero). + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%n = OpVariable %_ptr_int Function\n" + + "%load = OpLoad %int %n\n" + + "%2 = OpShiftRightLogical %int %load %uint_42\n" + + "OpReturn\n" + + "OpFunctionEnd", + 2, 0), + // Test case 22: fold n << 42 (undefined, so set to zero). + InstructionFoldingCase( + Header() + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%n = OpVariable %_ptr_int Function\n" + + "%load = OpLoad %int %n\n" + + "%2 = OpShiftLeftLogical %int %load %uint_42\n" + + "OpReturn\n" + + "OpFunctionEnd", 2, 0) )); // clang-format on @@ -3851,7 +3917,6 @@ INSTANTIATE_TEST_CASE_P(DoubleRedundantSubFoldingTest, ToNegateFoldingTest, 2, 3) )); -#ifdef SPIRV_EFFCEE using MatchingInstructionFoldingTest = ::testing::TestWithParam>; @@ -5787,7 +5852,7 @@ TEST_P(MatchingInstructionWithNoResultFoldingTest, Case) { INSTANTIATE_TEST_CASE_P(StoreMatchingTest, MatchingInstructionWithNoResultFoldingTest, ::testing::Values( - // Test case 0: Using OpDot to extract last element. + // Test case 0: Remove store of undef. InstructionFoldingCase( Header() + "; CHECK: OpLabel\n" + @@ -5800,7 +5865,18 @@ INSTANTIATE_TEST_CASE_P(StoreMatchingTest, MatchingInstructionWithNoResultFoldin "OpStore %n %undef\n" + "OpReturn\n" + "OpFunctionEnd", - 0 /* OpStore */, true) + 0 /* OpStore */, true), + // Test case 1: Keep volatile store. + InstructionFoldingCase( + Header() + + "%main = OpFunction %void None %void_func\n" + + "%main_lab = OpLabel\n" + + "%n = OpVariable %_ptr_v4double Function\n" + + "%undef = OpUndef %v4double\n" + + "OpStore %n %undef Volatile\n" + + "OpReturn\n" + + "OpFunctionEnd", + 0 /* OpStore */, false) )); INSTANTIATE_TEST_CASE_P(VectorShuffleMatchingTest, MatchingInstructionWithNoResultFoldingTest, @@ -6075,7 +6151,6 @@ INSTANTIATE_TEST_CASE_P(VectorShuffleMatchingTest, MatchingInstructionWithNoResu "OpFunctionEnd", 9, true) )); -#endif } // namespace } // namespace opt diff --git a/3rdparty/spirv-tools/test/opt/function_test.cpp b/3rdparty/spirv-tools/test/opt/function_test.cpp new file mode 100644 index 000000000..38ab29876 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/function_test.cpp @@ -0,0 +1,173 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include + +#include "function_utils.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" +#include "source/opt/build_module.h" +#include "source/opt/ir_context.h" + +namespace spvtools { +namespace opt { +namespace { + +using ::testing::Eq; + +TEST(FunctionTest, IsNotRecursive) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +OpDecorate %2 DescriptorSet 439418829 +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %12 +OpUnreachable +OpFunctionEnd +%12 = OpFunction %_struct_6 None %7 +%13 = OpLabel +OpUnreachable +OpFunctionEnd +)"; + + std::unique_ptr ctx = + spvtools::BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + auto* func = spvtest::GetFunction(ctx->module(), 9); + EXPECT_FALSE(func->IsRecursive()); + + func = spvtest::GetFunction(ctx->module(), 12); + EXPECT_FALSE(func->IsRecursive()); +} + +TEST(FunctionTest, IsDirectlyRecursive) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +OpDecorate %2 DescriptorSet 439418829 +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +)"; + + std::unique_ptr ctx = + spvtools::BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + auto* func = spvtest::GetFunction(ctx->module(), 9); + EXPECT_TRUE(func->IsRecursive()); +} + +TEST(FunctionTest, IsIndirectlyRecursive) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +OpDecorate %2 DescriptorSet 439418829 +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %12 +OpUnreachable +OpFunctionEnd +%12 = OpFunction %_struct_6 None %7 +%13 = OpLabel +%14 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +)"; + + std::unique_ptr ctx = + spvtools::BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + auto* func = spvtest::GetFunction(ctx->module(), 9); + EXPECT_TRUE(func->IsRecursive()); + + func = spvtest::GetFunction(ctx->module(), 12); + EXPECT_TRUE(func->IsRecursive()); +} + +TEST(FunctionTest, IsNotRecuriseCallingRecursive) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +OpDecorate %2 DescriptorSet 439418829 +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +)"; + + std::unique_ptr ctx = + spvtools::BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + auto* func = spvtest::GetFunction(ctx->module(), 1); + EXPECT_FALSE(func->IsRecursive()); +} + +} // namespace +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/if_conversion_test.cpp b/3rdparty/spirv-tools/test/opt/if_conversion_test.cpp index a62a15e88..03932a95a 100644 --- a/3rdparty/spirv-tools/test/opt/if_conversion_test.cpp +++ b/3rdparty/spirv-tools/test/opt/if_conversion_test.cpp @@ -25,7 +25,6 @@ namespace { using IfConversionTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(IfConversionTest, TestSimpleIfThenElse) { const std::string text = R"( ; CHECK: OpSelectionMerge [[merge:%\w+]] @@ -302,7 +301,6 @@ TEST_F(IfConversionTest, CodeMotionMultipleInstructions) { SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE TEST_F(IfConversionTest, NoCommonDominator) { const std::string text = R"(OpCapability Shader @@ -469,6 +467,45 @@ OpFunctionEnd SinglePassRunAndCheck(text, text, true, true); } +TEST_F(IfConversionTest, InvalidCommonDominator) { + const std::string text = R"(OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%float = OpTypeFloat 32 +%float_0 = OpConstant %float 0 +%float_1 = OpConstant %float 1 +%bool = OpTypeBool +%true = OpConstantTrue %bool +%1 = OpTypeFunction %void +%2 = OpFunction %void None %1 +%3 = OpLabel +OpBranch %4 +%4 = OpLabel +OpLoopMerge %5 %6 None +OpBranch %7 +%7 = OpLabel +OpSelectionMerge %8 None +OpBranchConditional %true %8 %9 +%9 = OpLabel +OpSelectionMerge %10 None +OpBranchConditional %true %10 %5 +%10 = OpLabel +OpBranch %8 +%8 = OpLabel +OpBranch %6 +%6 = OpLabel +OpBranchConditional %true %4 %5 +%5 = OpLabel +%11 = OpPhi %float %float_0 %6 %float_1 %9 +OpReturn +OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck(text, text, true, true); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/inline_test.cpp b/3rdparty/spirv-tools/test/opt/inline_test.cpp index 4eab77da4..44a969858 100644 --- a/3rdparty/spirv-tools/test/opt/inline_test.cpp +++ b/3rdparty/spirv-tools/test/opt/inline_test.cpp @@ -2144,19 +2144,12 @@ OpFunctionEnd OpBranch %19 %19 = OpLabel %20 = OpCopyObject %int %int_2 +%25 = OpCopyObject %int %int_0 OpLoopMerge %23 %26 None -OpBranch %25 -%25 = OpLabel -OpLoopMerge %26 %27 None -OpBranch %28 -%28 = OpLabel -%29 = OpCopyObject %int %int_0 -OpBranch %26 -%30 = OpLabel -%31 = OpCopyObject %int %int_1 OpBranch %26 %27 = OpLabel -OpBranchConditional %false %25 %26 +%28 = OpCopyObject %int %int_1 +OpBranch %26 %26 = OpLabel %22 = OpCopyObject %int %int_3 OpBranchConditional %true %19 %23 @@ -2226,23 +2219,16 @@ OpFunctionEnd R"(%1 = OpFunction %void None %9 %20 = OpLabel %21 = OpCopyObject %int %int_3 -OpBranch %24 -%24 = OpLabel -OpLoopMerge %25 %26 None -OpBranch %27 -%27 = OpLabel -%28 = OpCopyObject %int %int_0 -OpBranch %29 -%29 = OpLabel -%30 = OpPhi %int %28 %27 -%31 = OpCopyObject %int %int_1 +%24 = OpCopyObject %int %int_0 OpBranch %25 -%32 = OpLabel -%33 = OpCopyObject %int %int_2 -OpBranch %25 -%26 = OpLabel -OpBranchConditional %false %24 %25 %25 = OpLabel +%26 = OpPhi %int %24 %20 +%27 = OpCopyObject %int %int_1 +OpBranch %28 +%29 = OpLabel +%30 = OpCopyObject %int %int_2 +OpBranch %28 +%28 = OpLabel %23 = OpCopyObject %int %int_4 OpReturn OpFunctionEnd @@ -2253,6 +2239,222 @@ OpFunctionEnd false, true); } +TEST_F(InlineTest, NonInlinableCalleeWithSingleReturn) { + // The case from https://github.com/KhronosGroup/SPIRV-Tools/issues/2018 + // + // The callee has a single return, but cannot be inlined because the + // return is inside a loop. + + const std::string predefs = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" %_GLF_color +OpExecutionMode %main OriginUpperLeft +OpSource ESSL 310 +OpName %main "main" +OpName %f_ "f(" +OpName %i "i" +OpName %_GLF_color "_GLF_color" +OpDecorate %_GLF_color Location 0 +%void = OpTypeVoid +%7 = OpTypeFunction %void +%float = OpTypeFloat 32 +%9 = OpTypeFunction %float +%float_1 = OpConstant %float 1 +%bool = OpTypeBool +%false = OpConstantFalse %bool +%int = OpTypeInt 32 1 +%_ptr_Function_int = OpTypePointer Function %int +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_GLF_color = OpVariable %_ptr_Output_v4float Output +%float_0 = OpConstant %float 0 +%20 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 +%21 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1 +)"; + + const std::string caller = + R"(%main = OpFunction %void None %7 +%22 = OpLabel +%i = OpVariable %_ptr_Function_int Function +OpStore %i %int_0 +OpBranch %23 +%23 = OpLabel +OpLoopMerge %24 %25 None +OpBranch %26 +%26 = OpLabel +%27 = OpLoad %int %i +%28 = OpSLessThan %bool %27 %int_1 +OpBranchConditional %28 %29 %24 +%29 = OpLabel +OpStore %_GLF_color %20 +%30 = OpFunctionCall %float %f_ +OpBranch %25 +%25 = OpLabel +%31 = OpLoad %int %i +%32 = OpIAdd %int %31 %int_1 +OpStore %i %32 +OpBranch %23 +%24 = OpLabel +OpStore %_GLF_color %21 +OpReturn +OpFunctionEnd +)"; + + const std::string callee = + R"(%f_ = OpFunction %float None %9 +%33 = OpLabel +OpBranch %34 +%34 = OpLabel +OpLoopMerge %35 %36 None +OpBranch %37 +%37 = OpLabel +OpReturnValue %float_1 +%36 = OpLabel +OpBranch %34 +%35 = OpLabel +OpUnreachable +OpFunctionEnd +)"; + + SinglePassRunAndCheck( + predefs + caller + callee, predefs + caller + callee, false, true); +} + +TEST_F(InlineTest, CalleeWithSingleReturnNeedsSingleTripLoopWrapper) { + // The case from https://github.com/KhronosGroup/SPIRV-Tools/issues/2018 + // + // The callee has a single return, but needs single-trip loop wrapper + // to be inlined because the return is in a selection structure. + + const std::string predefs = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" %_GLF_color +OpExecutionMode %main OriginUpperLeft +OpSource ESSL 310 +OpName %main "main" +OpName %f_ "f(" +OpName %i "i" +OpName %_GLF_color "_GLF_color" +OpDecorate %_GLF_color Location 0 +%void = OpTypeVoid +%7 = OpTypeFunction %void +%float = OpTypeFloat 32 +%9 = OpTypeFunction %float +%float_1 = OpConstant %float 1 +%bool = OpTypeBool +%false = OpConstantFalse %bool +%true = OpConstantTrue %bool +%int = OpTypeInt 32 1 +%_ptr_Function_int = OpTypePointer Function %int +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_GLF_color = OpVariable %_ptr_Output_v4float Output +%float_0 = OpConstant %float 0 +%21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 +%22 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1 +)"; + + const std::string new_predefs = + R"(%_ptr_Function_float = OpTypePointer Function %float +)"; + + const std::string main_before = + R"(%main = OpFunction %void None %7 +%23 = OpLabel +%i = OpVariable %_ptr_Function_int Function +OpStore %i %int_0 +OpBranch %24 +%24 = OpLabel +OpLoopMerge %25 %26 None +OpBranch %27 +%27 = OpLabel +%28 = OpLoad %int %i +%29 = OpSLessThan %bool %28 %int_1 +OpBranchConditional %29 %30 %25 +%30 = OpLabel +OpStore %_GLF_color %21 +%31 = OpFunctionCall %float %f_ +OpBranch %26 +%26 = OpLabel +%32 = OpLoad %int %i +%33 = OpIAdd %int %32 %int_1 +OpStore %i %33 +OpBranch %24 +%25 = OpLabel +OpStore %_GLF_color %22 +OpReturn +OpFunctionEnd +)"; + + const std::string main_after = + R"(%main = OpFunction %void None %7 +%23 = OpLabel +%38 = OpVariable %_ptr_Function_float Function +%i = OpVariable %_ptr_Function_int Function +OpStore %i %int_0 +OpBranch %24 +%24 = OpLabel +OpLoopMerge %25 %26 None +OpBranch %27 +%27 = OpLabel +%28 = OpLoad %int %i +%29 = OpSLessThan %bool %28 %int_1 +OpBranchConditional %29 %30 %25 +%30 = OpLabel +OpStore %_GLF_color %21 +OpBranch %39 +%39 = OpLabel +OpLoopMerge %40 %41 None +OpBranch %42 +%42 = OpLabel +OpSelectionMerge %43 None +OpBranchConditional %true %44 %43 +%44 = OpLabel +OpStore %38 %float_1 +OpBranch %40 +%43 = OpLabel +OpUnreachable +%41 = OpLabel +OpBranchConditional %false %39 %40 +%40 = OpLabel +%31 = OpLoad %float %38 +OpBranch %26 +%26 = OpLabel +%32 = OpLoad %int %i +%33 = OpIAdd %int %32 %int_1 +OpStore %i %33 +OpBranch %24 +%25 = OpLabel +OpStore %_GLF_color %22 +OpReturn +OpFunctionEnd +)"; + + const std::string callee = + R"(%f_ = OpFunction %float None %9 +%34 = OpLabel +OpSelectionMerge %35 None +OpBranchConditional %true %36 %35 +%36 = OpLabel +OpReturnValue %float_1 +%35 = OpLabel +OpUnreachable +OpFunctionEnd +)"; + + SinglePassRunAndCheck( + predefs + main_before + callee, + predefs + new_predefs + main_after + callee, false, true); +} + TEST_F(InlineTest, Decorated1) { // Same test as Simple with the difference // that OpFAdd in the outlined function is @@ -2589,7 +2791,6 @@ TEST_F(InlineTest, SetParent) { } } -#ifdef SPIRV_EFFCEE TEST_F(InlineTest, OpKill) { const std::string text = R"( ; CHECK: OpFunction @@ -2601,6 +2802,7 @@ TEST_F(InlineTest, OpKill) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %voidfuncty = OpTypeFunction %void %main = OpFunction %void None %voidfuncty @@ -2630,6 +2832,7 @@ TEST_F(InlineTest, OpKillWithTrailingInstructions) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -2679,6 +2882,7 @@ TEST_F(InlineTest, OpKillInIf) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -2731,6 +2935,7 @@ TEST_F(InlineTest, OpKillInLoop) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -2840,14 +3045,73 @@ TEST_F(InlineTest, OpVariableWithInit) { SinglePassRunAndMatch(text, true); } -#endif + +TEST_F(InlineTest, DontInlineDirectlyRecursiveFunc) { + // Test that the name of the result id of the call is deleted. + const std::string test = + R"(OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +OpDecorate %2 DescriptorSet 439418829 +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +)"; + + SinglePassRunAndCheck(test, test, false, true); +} + +TEST_F(InlineTest, DontInlineInDirectlyRecursiveFunc) { + // Test that the name of the result id of the call is deleted. + const std::string test = + R"(OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +OpDecorate %2 DescriptorSet 439418829 +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %12 +OpUnreachable +OpFunctionEnd +%12 = OpFunction %_struct_6 None %7 +%13 = OpLabel +%14 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +)"; + + SinglePassRunAndCheck(test, test, false, true); +} // TODO(greg-lunarg): Add tests to verify handling of these cases: // // Empty modules // Modules without function definitions // Modules in which all functions do not call other functions -// Recursive functions (calling self & calling each other) // Caller and callee both accessing the same global variable // Functions with OpLine & OpNoLine // Others? diff --git a/3rdparty/spirv-tools/test/opt/inst_bindless_check_test.cpp b/3rdparty/spirv-tools/test/opt/inst_bindless_check_test.cpp new file mode 100644 index 000000000..1a1a19478 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/inst_bindless_check_test.cpp @@ -0,0 +1,1850 @@ +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "test/opt/assembly_builder.h" +#include "test/opt/pass_fixture.h" +#include "test/opt/pass_utils.h" + +namespace spvtools { +namespace opt { +namespace { + +using InstBindlessTest = PassTest<::testing::Test>; + +TEST_F(InstBindlessTest, Simple) { + // Texture2D g_tColor[128]; + // + // layout(push_constant) cbuffer PerViewConstantBuffer_t + // { + // uint g_nDataIdx; + // }; + // + // SamplerState g_sAniso; + // + // struct PS_INPUT + // { + // float2 vTextureCoords : TEXCOORD2; + // }; + // + // struct PS_OUTPUT + // { + // float4 vColor : SV_Target0; + // }; + // + // PS_OUTPUT MainPs(PS_INPUT i) + // { + // PS_OUTPUT ps_output; + // ps_output.vColor = + // g_tColor[ g_nDataIdx ].Sample(g_sAniso, i.vTextureCoords.xy); + // return ps_output; + // } + + const std::string entry_before = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +)"; + + const std::string entry_after = + R"(OpCapability Shader +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +)"; + + const std::string names_annots = + R"(OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %g_sAniso "g_sAniso" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +)"; + + const std::string new_annots = + R"(OpDecorate %_struct_55 Block +OpMemberDecorate %_struct_55 0 Offset 0 +OpMemberDecorate %_struct_55 1 Offset 4 +OpDecorate %57 DescriptorSet 7 +OpDecorate %57 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +)"; + + const std::string consts_types_vars = + R"(%void = OpTypeVoid +%10 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%16 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%_arr_16_uint_128 = OpTypeArray %16 %uint_128 +%_ptr_UniformConstant__arr_16_uint_128 = OpTypePointer UniformConstant %_arr_16_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_16_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16 +%24 = OpTypeSampler +%_ptr_UniformConstant_24 = OpTypePointer UniformConstant %24 +%g_sAniso = OpVariable %_ptr_UniformConstant_24 UniformConstant +%26 = OpTypeSampledImage %16 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +)"; + + const std::string new_consts_types_vars = + R"(%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%48 = OpTypeFunction %void %uint %uint %uint %uint +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_55 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_55 = OpTypePointer StorageBuffer %_struct_55 +%57 = OpVariable %_ptr_StorageBuffer__struct_55 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_9 = OpConstant %uint 9 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%uint_56 = OpConstant %uint 56 +%103 = OpConstantNull %v4float +)"; + + const std::string func_pt1 = + R"(%MainPs = OpFunction %void None %10 +%29 = OpLabel +%30 = OpLoad %v2float %i_vTextureCoords +%31 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%32 = OpLoad %uint %31 +%33 = OpAccessChain %_ptr_UniformConstant_16 %g_tColor %32 +%34 = OpLoad %16 %33 +%35 = OpLoad %24 %g_sAniso +%36 = OpSampledImage %26 %34 %35 +)"; + + const std::string func_pt2_before = + R"(%37 = OpImageSampleImplicitLod %v4float %36 %30 +OpStore %_entryPointOutput_vColor %37 +OpReturn +OpFunctionEnd +)"; + + const std::string func_pt2_after = + R"(%40 = OpULessThan %bool %32 %uint_128 +OpSelectionMerge %41 None +OpBranchConditional %40 %42 %43 +%42 = OpLabel +%44 = OpLoad %16 %33 +%45 = OpSampledImage %26 %44 %35 +%46 = OpImageSampleImplicitLod %v4float %45 %30 +OpBranch %41 +%43 = OpLabel +%102 = OpFunctionCall %void %47 %uint_56 %uint_0 %32 %uint_128 +OpBranch %41 +%41 = OpLabel +%104 = OpPhi %v4float %46 %42 %103 %43 +OpStore %_entryPointOutput_vColor %104 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%47 = OpFunction %void None %48 +%49 = OpFunctionParameter %uint +%50 = OpFunctionParameter %uint +%51 = OpFunctionParameter %uint +%52 = OpFunctionParameter %uint +%53 = OpLabel +%59 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_0 +%62 = OpAtomicIAdd %uint %59 %uint_4 %uint_0 %uint_9 +%63 = OpIAdd %uint %62 %uint_9 +%64 = OpArrayLength %uint %57 1 +%65 = OpULessThanEqual %bool %63 %64 +OpSelectionMerge %66 None +OpBranchConditional %65 %67 %66 +%67 = OpLabel +%68 = OpIAdd %uint %62 %uint_0 +%70 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %68 +OpStore %70 %uint_9 +%72 = OpIAdd %uint %62 %uint_1 +%73 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %72 +OpStore %73 %uint_23 +%75 = OpIAdd %uint %62 %uint_2 +%76 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %75 +OpStore %76 %49 +%78 = OpIAdd %uint %62 %uint_3 +%79 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %78 +OpStore %79 %uint_4 +%82 = OpLoad %v4float %gl_FragCoord +%84 = OpBitcast %v4uint %82 +%85 = OpCompositeExtract %uint %84 0 +%86 = OpIAdd %uint %62 %uint_4 +%87 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %86 +OpStore %87 %85 +%88 = OpCompositeExtract %uint %84 1 +%90 = OpIAdd %uint %62 %uint_5 +%91 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %90 +OpStore %91 %88 +%93 = OpIAdd %uint %62 %uint_6 +%94 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %93 +OpStore %94 %50 +%96 = OpIAdd %uint %62 %uint_7 +%97 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %96 +OpStore %97 %51 +%99 = OpIAdd %uint %62 %uint_8 +%100 = OpAccessChain %_ptr_StorageBuffer_uint %57 %uint_1 %99 +OpStore %100 %52 +OpBranch %66 +%66 = OpLabel +OpReturn +OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + entry_before + names_annots + consts_types_vars + func_pt1 + + func_pt2_before, + entry_after + names_annots + new_annots + consts_types_vars + + new_consts_types_vars + func_pt1 + func_pt2_after + output_func, + true, true); +} + +TEST_F(InstBindlessTest, NoInstrumentConstIndexInbounds) { + // Texture2D g_tColor[128]; + // + // SamplerState g_sAniso; + // + // struct PS_INPUT + // { + // float2 vTextureCoords : TEXCOORD2; + // }; + // + // struct PS_OUTPUT + // { + // float4 vColor : SV_Target0; + // }; + // + // PS_OUTPUT MainPs(PS_INPUT i) + // { + // PS_OUTPUT ps_output; + // + // ps_output.vColor = g_tColor[ 37 ].Sample(g_sAniso, i.vTextureCoords.xy); + // return ps_output; + // } + + const std::string before = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %g_sAniso "g_sAniso" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +%void = OpTypeVoid +%8 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%int_37 = OpConstant %int 37 +%15 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%_arr_15_uint_128 = OpTypeArray %15 %uint_128 +%_ptr_UniformConstant__arr_15_uint_128 = OpTypePointer UniformConstant %_arr_15_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_15_uint_128 UniformConstant +%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15 +%21 = OpTypeSampler +%_ptr_UniformConstant_21 = OpTypePointer UniformConstant %21 +%g_sAniso = OpVariable %_ptr_UniformConstant_21 UniformConstant +%23 = OpTypeSampledImage %15 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%MainPs = OpFunction %void None %8 +%26 = OpLabel +%27 = OpLoad %v2float %i_vTextureCoords +%28 = OpAccessChain %_ptr_UniformConstant_15 %g_tColor %int_37 +%29 = OpLoad %15 %28 +%30 = OpLoad %21 %g_sAniso +%31 = OpSampledImage %23 %29 %30 +%32 = OpImageSampleImplicitLod %v4float %31 %27 +OpStore %_entryPointOutput_vColor %32 +OpReturn +OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck(before, before, true, true); +} + +TEST_F(InstBindlessTest, InstrumentMultipleInstructions) { + // Texture2D g_tColor[128]; + // + // layout(push_constant) cbuffer PerViewConstantBuffer_t + // { + // uint g_nDataIdx; + // uint g_nDataIdx2; + // }; + // + // SamplerState g_sAniso; + // + // struct PS_INPUT + // { + // float2 vTextureCoords : TEXCOORD2; + // }; + // + // struct PS_OUTPUT + // { + // float4 vColor : SV_Target0; + // }; + // + // PS_OUTPUT MainPs(PS_INPUT i) + // { + // PS_OUTPUT ps_output; + // + // float t = g_tColor[g_nDataIdx ].Sample(g_sAniso, i.vTextureCoords.xy); + // float t2 = g_tColor[g_nDataIdx2].Sample(g_sAniso, i.vTextureCoords.xy); + // ps_output.vColor = t + t2; + // return ps_output; + // } + + const std::string defs_before = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %g_sAniso "g_sAniso" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpMemberDecorate %PerViewConstantBuffer_t 1 Offset 4 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +%void = OpTypeVoid +%10 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%17 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%_arr_17_uint_128 = OpTypeArray %17 %uint_128 +%_ptr_UniformConstant__arr_17_uint_128 = OpTypePointer UniformConstant %_arr_17_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_17_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_17 = OpTypePointer UniformConstant %17 +%25 = OpTypeSampler +%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %25 +%g_sAniso = OpVariable %_ptr_UniformConstant_25 UniformConstant +%27 = OpTypeSampledImage %17 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +)"; + + const std::string defs_after = + R"(OpCapability Shader +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %g_sAniso "g_sAniso" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpMemberDecorate %PerViewConstantBuffer_t 1 Offset 4 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +OpDecorate %_struct_63 Block +OpMemberDecorate %_struct_63 0 Offset 0 +OpMemberDecorate %_struct_63 1 Offset 4 +OpDecorate %65 DescriptorSet 7 +OpDecorate %65 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +%void = OpTypeVoid +%10 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%17 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%_arr_17_uint_128 = OpTypeArray %17 %uint_128 +%_ptr_UniformConstant__arr_17_uint_128 = OpTypePointer UniformConstant %_arr_17_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_17_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_17 = OpTypePointer UniformConstant %17 +%25 = OpTypeSampler +%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %25 +%g_sAniso = OpVariable %_ptr_UniformConstant_25 UniformConstant +%27 = OpTypeSampledImage %17 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%56 = OpTypeFunction %void %uint %uint %uint %uint +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_63 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_63 = OpTypePointer StorageBuffer %_struct_63 +%65 = OpVariable %_ptr_StorageBuffer__struct_63 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_9 = OpConstant %uint 9 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%uint_58 = OpConstant %uint 58 +%111 = OpConstantNull %v4float +%uint_64 = OpConstant %uint 64 +)"; + + const std::string func_before = + R"(%MainPs = OpFunction %void None %10 +%30 = OpLabel +%31 = OpLoad %v2float %i_vTextureCoords +%32 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%33 = OpLoad %uint %32 +%34 = OpAccessChain %_ptr_UniformConstant_17 %g_tColor %33 +%35 = OpLoad %17 %34 +%36 = OpLoad %25 %g_sAniso +%37 = OpSampledImage %27 %35 %36 +%38 = OpImageSampleImplicitLod %v4float %37 %31 +%39 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1 +%40 = OpLoad %uint %39 +%41 = OpAccessChain %_ptr_UniformConstant_17 %g_tColor %40 +%42 = OpLoad %17 %41 +%43 = OpSampledImage %27 %42 %36 +%44 = OpImageSampleImplicitLod %v4float %43 %31 +%45 = OpFAdd %v4float %38 %44 +OpStore %_entryPointOutput_vColor %45 +OpReturn +OpFunctionEnd +)"; + + const std::string func_after = + R"(%MainPs = OpFunction %void None %10 +%30 = OpLabel +%31 = OpLoad %v2float %i_vTextureCoords +%32 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%33 = OpLoad %uint %32 +%34 = OpAccessChain %_ptr_UniformConstant_17 %g_tColor %33 +%35 = OpLoad %17 %34 +%36 = OpLoad %25 %g_sAniso +%37 = OpSampledImage %27 %35 %36 +%48 = OpULessThan %bool %33 %uint_128 +OpSelectionMerge %49 None +OpBranchConditional %48 %50 %51 +%50 = OpLabel +%52 = OpLoad %17 %34 +%53 = OpSampledImage %27 %52 %36 +%54 = OpImageSampleImplicitLod %v4float %53 %31 +OpBranch %49 +%51 = OpLabel +%110 = OpFunctionCall %void %55 %uint_58 %uint_0 %33 %uint_128 +OpBranch %49 +%49 = OpLabel +%112 = OpPhi %v4float %54 %50 %111 %51 +%39 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1 +%40 = OpLoad %uint %39 +%41 = OpAccessChain %_ptr_UniformConstant_17 %g_tColor %40 +%42 = OpLoad %17 %41 +%43 = OpSampledImage %27 %42 %36 +%113 = OpULessThan %bool %40 %uint_128 +OpSelectionMerge %114 None +OpBranchConditional %113 %115 %116 +%115 = OpLabel +%117 = OpLoad %17 %41 +%118 = OpSampledImage %27 %117 %36 +%119 = OpImageSampleImplicitLod %v4float %118 %31 +OpBranch %114 +%116 = OpLabel +%121 = OpFunctionCall %void %55 %uint_64 %uint_0 %40 %uint_128 +OpBranch %114 +%114 = OpLabel +%122 = OpPhi %v4float %119 %115 %111 %116 +%45 = OpFAdd %v4float %112 %122 +OpStore %_entryPointOutput_vColor %45 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%55 = OpFunction %void None %56 +%57 = OpFunctionParameter %uint +%58 = OpFunctionParameter %uint +%59 = OpFunctionParameter %uint +%60 = OpFunctionParameter %uint +%61 = OpLabel +%67 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_0 +%70 = OpAtomicIAdd %uint %67 %uint_4 %uint_0 %uint_9 +%71 = OpIAdd %uint %70 %uint_9 +%72 = OpArrayLength %uint %65 1 +%73 = OpULessThanEqual %bool %71 %72 +OpSelectionMerge %74 None +OpBranchConditional %73 %75 %74 +%75 = OpLabel +%76 = OpIAdd %uint %70 %uint_0 +%78 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %76 +OpStore %78 %uint_9 +%80 = OpIAdd %uint %70 %uint_1 +%81 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %80 +OpStore %81 %uint_23 +%83 = OpIAdd %uint %70 %uint_2 +%84 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %83 +OpStore %84 %57 +%86 = OpIAdd %uint %70 %uint_3 +%87 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %86 +OpStore %87 %uint_4 +%90 = OpLoad %v4float %gl_FragCoord +%92 = OpBitcast %v4uint %90 +%93 = OpCompositeExtract %uint %92 0 +%94 = OpIAdd %uint %70 %uint_4 +%95 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %94 +OpStore %95 %93 +%96 = OpCompositeExtract %uint %92 1 +%98 = OpIAdd %uint %70 %uint_5 +%99 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %98 +OpStore %99 %96 +%101 = OpIAdd %uint %70 %uint_6 +%102 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %101 +OpStore %102 %58 +%104 = OpIAdd %uint %70 %uint_7 +%105 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %104 +OpStore %105 %59 +%107 = OpIAdd %uint %70 %uint_8 +%108 = OpAccessChain %_ptr_StorageBuffer_uint %65 %uint_1 %107 +OpStore %108 %60 +OpBranch %74 +%74 = OpLabel +OpReturn +OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + defs_before + func_before, defs_after + func_after + output_func, true, + true); +} + +TEST_F(InstBindlessTest, ReuseConstsTypesBuiltins) { + // This test verifies that the pass resuses existing constants, types + // and builtin variables. This test was created by editing the SPIR-V + // from the Simple test. + + const std::string defs_before = + R"(OpCapability Shader +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %g_sAniso "g_sAniso" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +OpDecorate %85 DescriptorSet 7 +OpDecorate %85 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +%void = OpTypeVoid +%3 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%20 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%_arr_20_uint_128 = OpTypeArray %20 %uint_128 +%_ptr_UniformConstant__arr_20_uint_128 = OpTypePointer UniformConstant %_arr_20_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_20_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_20 = OpTypePointer UniformConstant %20 +%35 = OpTypeSampler +%_ptr_UniformConstant_35 = OpTypePointer UniformConstant %35 +%g_sAniso = OpVariable %_ptr_UniformConstant_35 UniformConstant +%39 = OpTypeSampledImage %20 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_83 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_83 = OpTypePointer StorageBuffer %_struct_83 +%85 = OpVariable %_ptr_StorageBuffer__struct_83 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_10 = OpConstant %uint 10 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_9 = OpConstant %uint 9 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%131 = OpConstantNull %v4float +)"; + + const std::string defs_after = + R"(OpCapability Shader +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %g_sAniso "g_sAniso" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +OpDecorate %10 DescriptorSet 7 +OpDecorate %10 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +OpDecorate %_struct_34 Block +OpMemberDecorate %_struct_34 0 Offset 0 +OpMemberDecorate %_struct_34 1 Offset 4 +OpDecorate %74 DescriptorSet 7 +OpDecorate %74 Binding 0 +%void = OpTypeVoid +%12 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%18 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%_arr_18_uint_128 = OpTypeArray %18 %uint_128 +%_ptr_UniformConstant__arr_18_uint_128 = OpTypePointer UniformConstant %_arr_18_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_18_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_18 = OpTypePointer UniformConstant %18 +%26 = OpTypeSampler +%_ptr_UniformConstant_26 = OpTypePointer UniformConstant %26 +%g_sAniso = OpVariable %_ptr_UniformConstant_26 UniformConstant +%28 = OpTypeSampledImage %18 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_34 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_34 = OpTypePointer StorageBuffer %_struct_34 +%10 = OpVariable %_ptr_StorageBuffer__struct_34 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_10 = OpConstant %uint 10 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_9 = OpConstant %uint 9 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%50 = OpConstantNull %v4float +%68 = OpTypeFunction %void %uint %uint %uint %uint +%74 = OpVariable %_ptr_StorageBuffer__struct_34 StorageBuffer +%uint_82 = OpConstant %uint 82 +)"; + + const std::string func_before = + R"(%MainPs = OpFunction %void None %3 +%5 = OpLabel +%53 = OpLoad %v2float %i_vTextureCoords +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%64 = OpLoad %uint %63 +%65 = OpAccessChain %_ptr_UniformConstant_20 %g_tColor %64 +%67 = OpLoad %35 %g_sAniso +%78 = OpLoad %20 %65 +%79 = OpSampledImage %39 %78 %67 +%71 = OpImageSampleImplicitLod %v4float %79 %53 +OpStore %_entryPointOutput_vColor %71 +OpReturn +OpFunctionEnd +)"; + + const std::string func_after = + R"(%MainPs = OpFunction %void None %12 +%51 = OpLabel +%52 = OpLoad %v2float %i_vTextureCoords +%53 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%54 = OpLoad %uint %53 +%55 = OpAccessChain %_ptr_UniformConstant_18 %g_tColor %54 +%56 = OpLoad %26 %g_sAniso +%57 = OpLoad %18 %55 +%58 = OpSampledImage %28 %57 %56 +%60 = OpULessThan %bool %54 %uint_128 +OpSelectionMerge %61 None +OpBranchConditional %60 %62 %63 +%62 = OpLabel +%64 = OpLoad %18 %55 +%65 = OpSampledImage %28 %64 %56 +%66 = OpImageSampleImplicitLod %v4float %65 %52 +OpBranch %61 +%63 = OpLabel +%105 = OpFunctionCall %void %67 %uint_82 %uint_0 %54 %uint_128 +OpBranch %61 +%61 = OpLabel +%106 = OpPhi %v4float %66 %62 %50 %63 +OpStore %_entryPointOutput_vColor %106 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%67 = OpFunction %void None %68 +%69 = OpFunctionParameter %uint +%70 = OpFunctionParameter %uint +%71 = OpFunctionParameter %uint +%72 = OpFunctionParameter %uint +%73 = OpLabel +%75 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_0 +%76 = OpAtomicIAdd %uint %75 %uint_4 %uint_0 %uint_9 +%77 = OpIAdd %uint %76 %uint_9 +%78 = OpArrayLength %uint %74 1 +%79 = OpULessThanEqual %bool %77 %78 +OpSelectionMerge %80 None +OpBranchConditional %79 %81 %80 +%81 = OpLabel +%82 = OpIAdd %uint %76 %uint_0 +%83 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %82 +OpStore %83 %uint_9 +%84 = OpIAdd %uint %76 %uint_1 +%85 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %84 +OpStore %85 %uint_23 +%86 = OpIAdd %uint %76 %uint_2 +%87 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %86 +OpStore %87 %69 +%88 = OpIAdd %uint %76 %uint_3 +%89 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %88 +OpStore %89 %uint_4 +%90 = OpLoad %v4float %gl_FragCoord +%91 = OpBitcast %v4uint %90 +%92 = OpCompositeExtract %uint %91 0 +%93 = OpIAdd %uint %76 %uint_4 +%94 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %93 +OpStore %94 %92 +%95 = OpCompositeExtract %uint %91 1 +%96 = OpIAdd %uint %76 %uint_5 +%97 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %96 +OpStore %97 %95 +%98 = OpIAdd %uint %76 %uint_6 +%99 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %98 +OpStore %99 %70 +%100 = OpIAdd %uint %76 %uint_7 +%101 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %100 +OpStore %101 %71 +%102 = OpIAdd %uint %76 %uint_8 +%103 = OpAccessChain %_ptr_StorageBuffer_uint %74 %uint_1 %102 +OpStore %103 %72 +OpBranch %80 +%80 = OpLabel +OpReturn +OpFunctionEnd +)"; + + // SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + defs_before + func_before, defs_after + func_after + output_func, true, + true); +} + +TEST_F(InstBindlessTest, InstrumentOpImage) { + // This test verifies that the pass will correctly instrument shader + // using OpImage. This test was created by editing the SPIR-V + // from the Simple test. + + const std::string defs_before = + R"(OpCapability Shader +OpCapability StorageImageReadWithoutFormat +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +%void = OpTypeVoid +%3 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%v2int = OpTypeVector %int 2 +%int_0 = OpConstant %int 0 +%20 = OpTypeImage %float 2D 0 0 0 0 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%39 = OpTypeSampledImage %20 +%_arr_39_uint_128 = OpTypeArray %39 %uint_128 +%_ptr_UniformConstant__arr_39_uint_128 = OpTypePointer UniformConstant %_arr_39_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_39_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_39 = OpTypePointer UniformConstant %39 +%_ptr_Input_v2int = OpTypePointer Input %v2int +%i_vTextureCoords = OpVariable %_ptr_Input_v2int Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +)"; + + const std::string defs_after = + R"(OpCapability Shader +OpCapability StorageImageReadWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +OpDecorate %_struct_51 Block +OpMemberDecorate %_struct_51 0 Offset 0 +OpMemberDecorate %_struct_51 1 Offset 4 +OpDecorate %53 DescriptorSet 7 +OpDecorate %53 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +%void = OpTypeVoid +%9 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%v2int = OpTypeVector %int 2 +%int_0 = OpConstant %int 0 +%15 = OpTypeImage %float 2D 0 0 0 0 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%18 = OpTypeSampledImage %15 +%_arr_18_uint_128 = OpTypeArray %18 %uint_128 +%_ptr_UniformConstant__arr_18_uint_128 = OpTypePointer UniformConstant %_arr_18_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_18_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_18 = OpTypePointer UniformConstant %18 +%_ptr_Input_v2int = OpTypePointer Input %v2int +%i_vTextureCoords = OpVariable %_ptr_Input_v2int Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%44 = OpTypeFunction %void %uint %uint %uint %uint +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_51 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_51 = OpTypePointer StorageBuffer %_struct_51 +%53 = OpVariable %_ptr_StorageBuffer__struct_51 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_9 = OpConstant %uint 9 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%uint_51 = OpConstant %uint 51 +%99 = OpConstantNull %v4float +)"; + + const std::string func_before = + R"(%MainPs = OpFunction %void None %3 +%5 = OpLabel +%53 = OpLoad %v2int %i_vTextureCoords +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%64 = OpLoad %uint %63 +%65 = OpAccessChain %_ptr_UniformConstant_39 %g_tColor %64 +%66 = OpLoad %39 %65 +%75 = OpImage %20 %66 +%71 = OpImageRead %v4float %75 %53 +OpStore %_entryPointOutput_vColor %71 +OpReturn +OpFunctionEnd +)"; + + const std::string func_after = + R"(%MainPs = OpFunction %void None %9 +%26 = OpLabel +%27 = OpLoad %v2int %i_vTextureCoords +%28 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%29 = OpLoad %uint %28 +%30 = OpAccessChain %_ptr_UniformConstant_18 %g_tColor %29 +%31 = OpLoad %18 %30 +%32 = OpImage %15 %31 +%36 = OpULessThan %bool %29 %uint_128 +OpSelectionMerge %37 None +OpBranchConditional %36 %38 %39 +%38 = OpLabel +%40 = OpLoad %18 %30 +%41 = OpImage %15 %40 +%42 = OpImageRead %v4float %41 %27 +OpBranch %37 +%39 = OpLabel +%98 = OpFunctionCall %void %43 %uint_51 %uint_0 %29 %uint_128 +OpBranch %37 +%37 = OpLabel +%100 = OpPhi %v4float %42 %38 %99 %39 +OpStore %_entryPointOutput_vColor %100 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%43 = OpFunction %void None %44 +%45 = OpFunctionParameter %uint +%46 = OpFunctionParameter %uint +%47 = OpFunctionParameter %uint +%48 = OpFunctionParameter %uint +%49 = OpLabel +%55 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_0 +%58 = OpAtomicIAdd %uint %55 %uint_4 %uint_0 %uint_9 +%59 = OpIAdd %uint %58 %uint_9 +%60 = OpArrayLength %uint %53 1 +%61 = OpULessThanEqual %bool %59 %60 +OpSelectionMerge %62 None +OpBranchConditional %61 %63 %62 +%63 = OpLabel +%64 = OpIAdd %uint %58 %uint_0 +%66 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %64 +OpStore %66 %uint_9 +%68 = OpIAdd %uint %58 %uint_1 +%69 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %68 +OpStore %69 %uint_23 +%71 = OpIAdd %uint %58 %uint_2 +%72 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %71 +OpStore %72 %45 +%74 = OpIAdd %uint %58 %uint_3 +%75 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %74 +OpStore %75 %uint_4 +%78 = OpLoad %v4float %gl_FragCoord +%80 = OpBitcast %v4uint %78 +%81 = OpCompositeExtract %uint %80 0 +%82 = OpIAdd %uint %58 %uint_4 +%83 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %82 +OpStore %83 %81 +%84 = OpCompositeExtract %uint %80 1 +%86 = OpIAdd %uint %58 %uint_5 +%87 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %86 +OpStore %87 %84 +%89 = OpIAdd %uint %58 %uint_6 +%90 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %89 +OpStore %90 %46 +%92 = OpIAdd %uint %58 %uint_7 +%93 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %92 +OpStore %93 %47 +%95 = OpIAdd %uint %58 %uint_8 +%96 = OpAccessChain %_ptr_StorageBuffer_uint %53 %uint_1 %95 +OpStore %96 %48 +OpBranch %62 +%62 = OpLabel +OpReturn +OpFunctionEnd +)"; + + // SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + defs_before + func_before, defs_after + func_after + output_func, true, + true); +} + +TEST_F(InstBindlessTest, InstrumentSampledImage) { + // This test verifies that the pass will correctly instrument shader + // using sampled image. This test was created by editing the SPIR-V + // from the Simple test. + + const std::string defs_before = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +%void = OpTypeVoid +%3 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%20 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%39 = OpTypeSampledImage %20 +%_arr_39_uint_128 = OpTypeArray %39 %uint_128 +%_ptr_UniformConstant__arr_39_uint_128 = OpTypePointer UniformConstant %_arr_39_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_39_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_39 = OpTypePointer UniformConstant %39 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +)"; + + const std::string defs_after = + R"(OpCapability Shader +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +OpDecorate %_struct_49 Block +OpMemberDecorate %_struct_49 0 Offset 0 +OpMemberDecorate %_struct_49 1 Offset 4 +OpDecorate %51 DescriptorSet 7 +OpDecorate %51 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +%void = OpTypeVoid +%9 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%15 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%18 = OpTypeSampledImage %15 +%_arr_18_uint_128 = OpTypeArray %18 %uint_128 +%_ptr_UniformConstant__arr_18_uint_128 = OpTypePointer UniformConstant %_arr_18_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_18_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_18 = OpTypePointer UniformConstant %18 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%42 = OpTypeFunction %void %uint %uint %uint %uint +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_49 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_49 = OpTypePointer StorageBuffer %_struct_49 +%51 = OpVariable %_ptr_StorageBuffer__struct_49 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_9 = OpConstant %uint 9 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%uint_49 = OpConstant %uint 49 +%97 = OpConstantNull %v4float +)"; + + const std::string func_before = + R"(%MainPs = OpFunction %void None %3 +%5 = OpLabel +%53 = OpLoad %v2float %i_vTextureCoords +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%64 = OpLoad %uint %63 +%65 = OpAccessChain %_ptr_UniformConstant_39 %g_tColor %64 +%66 = OpLoad %39 %65 +%71 = OpImageSampleImplicitLod %v4float %66 %53 +OpStore %_entryPointOutput_vColor %71 +OpReturn +OpFunctionEnd +)"; + + const std::string func_after = + R"(%MainPs = OpFunction %void None %9 +%26 = OpLabel +%27 = OpLoad %v2float %i_vTextureCoords +%28 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%29 = OpLoad %uint %28 +%30 = OpAccessChain %_ptr_UniformConstant_18 %g_tColor %29 +%31 = OpLoad %18 %30 +%35 = OpULessThan %bool %29 %uint_128 +OpSelectionMerge %36 None +OpBranchConditional %35 %37 %38 +%37 = OpLabel +%39 = OpLoad %18 %30 +%40 = OpImageSampleImplicitLod %v4float %39 %27 +OpBranch %36 +%38 = OpLabel +%96 = OpFunctionCall %void %41 %uint_49 %uint_0 %29 %uint_128 +OpBranch %36 +%36 = OpLabel +%98 = OpPhi %v4float %40 %37 %97 %38 +OpStore %_entryPointOutput_vColor %98 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%41 = OpFunction %void None %42 +%43 = OpFunctionParameter %uint +%44 = OpFunctionParameter %uint +%45 = OpFunctionParameter %uint +%46 = OpFunctionParameter %uint +%47 = OpLabel +%53 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_0 +%56 = OpAtomicIAdd %uint %53 %uint_4 %uint_0 %uint_9 +%57 = OpIAdd %uint %56 %uint_9 +%58 = OpArrayLength %uint %51 1 +%59 = OpULessThanEqual %bool %57 %58 +OpSelectionMerge %60 None +OpBranchConditional %59 %61 %60 +%61 = OpLabel +%62 = OpIAdd %uint %56 %uint_0 +%64 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %62 +OpStore %64 %uint_9 +%66 = OpIAdd %uint %56 %uint_1 +%67 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %66 +OpStore %67 %uint_23 +%69 = OpIAdd %uint %56 %uint_2 +%70 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %69 +OpStore %70 %43 +%72 = OpIAdd %uint %56 %uint_3 +%73 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %72 +OpStore %73 %uint_4 +%76 = OpLoad %v4float %gl_FragCoord +%78 = OpBitcast %v4uint %76 +%79 = OpCompositeExtract %uint %78 0 +%80 = OpIAdd %uint %56 %uint_4 +%81 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %80 +OpStore %81 %79 +%82 = OpCompositeExtract %uint %78 1 +%84 = OpIAdd %uint %56 %uint_5 +%85 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %84 +OpStore %85 %82 +%87 = OpIAdd %uint %56 %uint_6 +%88 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %87 +OpStore %88 %44 +%90 = OpIAdd %uint %56 %uint_7 +%91 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %90 +OpStore %91 %45 +%93 = OpIAdd %uint %56 %uint_8 +%94 = OpAccessChain %_ptr_StorageBuffer_uint %51 %uint_1 %93 +OpStore %94 %46 +OpBranch %60 +%60 = OpLabel +OpReturn +OpFunctionEnd +)"; + + // SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + defs_before + func_before, defs_after + func_after + output_func, true, + true); +} + +TEST_F(InstBindlessTest, InstrumentImageWrite) { + // This test verifies that the pass will correctly instrument shader + // doing bindless image write. This test was created by editing the SPIR-V + // from the Simple test. + + const std::string defs_before = + R"(OpCapability Shader +OpCapability StorageImageWriteWithoutFormat +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +%void = OpTypeVoid +%3 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%v2int = OpTypeVector %int 2 +%int_0 = OpConstant %int 0 +%20 = OpTypeImage %float 2D 0 0 0 0 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%80 = OpConstantNull %v4float +%_arr_20_uint_128 = OpTypeArray %20 %uint_128 +%_ptr_UniformConstant__arr_20_uint_128 = OpTypePointer UniformConstant %_arr_20_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_20_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_20 = OpTypePointer UniformConstant %20 +%_ptr_Input_v2int = OpTypePointer Input %v2int +%i_vTextureCoords = OpVariable %_ptr_Input_v2int Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +)"; + + const std::string defs_after = + R"(OpCapability Shader +OpCapability StorageImageWriteWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor %gl_FragCoord +OpExecutionMode %MainPs OriginUpperLeft +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %g_tColor "g_tColor" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpName %_ "" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpDecorate %g_tColor DescriptorSet 3 +OpDecorate %g_tColor Binding 0 +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +OpDecorate %_struct_48 Block +OpMemberDecorate %_struct_48 0 Offset 0 +OpMemberDecorate %_struct_48 1 Offset 4 +OpDecorate %50 DescriptorSet 7 +OpDecorate %50 Binding 0 +OpDecorate %gl_FragCoord BuiltIn FragCoord +%void = OpTypeVoid +%9 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%v4float = OpTypeVector %float 4 +%int = OpTypeInt 32 1 +%v2int = OpTypeVector %int 2 +%int_0 = OpConstant %int 0 +%16 = OpTypeImage %float 2D 0 0 0 0 Unknown +%uint = OpTypeInt 32 0 +%uint_128 = OpConstant %uint 128 +%19 = OpConstantNull %v4float +%_arr_16_uint_128 = OpTypeArray %16 %uint_128 +%_ptr_UniformConstant__arr_16_uint_128 = OpTypePointer UniformConstant %_arr_16_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_16_uint_128 UniformConstant +%PerViewConstantBuffer_t = OpTypeStruct %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16 +%_ptr_Input_v2int = OpTypePointer Input %v2int +%i_vTextureCoords = OpVariable %_ptr_Input_v2int Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%41 = OpTypeFunction %void %uint %uint %uint %uint +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_48 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_48 = OpTypePointer StorageBuffer %_struct_48 +%50 = OpVariable %_ptr_StorageBuffer__struct_48 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_9 = OpConstant %uint 9 +%uint_4 = OpConstant %uint 4 +%uint_1 = OpConstant %uint 1 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%gl_FragCoord = OpVariable %_ptr_Input_v4float Input +%v4uint = OpTypeVector %uint 4 +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%uint_51 = OpConstant %uint 51 +)"; + + const std::string func_before = + R"(%MainPs = OpFunction %void None %3 +%5 = OpLabel +%53 = OpLoad %v2int %i_vTextureCoords +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%64 = OpLoad %uint %63 +%65 = OpAccessChain %_ptr_UniformConstant_20 %g_tColor %64 +%66 = OpLoad %20 %65 +OpImageWrite %66 %53 %80 +OpStore %_entryPointOutput_vColor %80 +OpReturn +OpFunctionEnd +)"; + + const std::string func_after = + R"(%MainPs = OpFunction %void None %9 +%27 = OpLabel +%28 = OpLoad %v2int %i_vTextureCoords +%29 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%30 = OpLoad %uint %29 +%31 = OpAccessChain %_ptr_UniformConstant_16 %g_tColor %30 +%32 = OpLoad %16 %31 +%35 = OpULessThan %bool %30 %uint_128 +OpSelectionMerge %36 None +OpBranchConditional %35 %37 %38 +%37 = OpLabel +%39 = OpLoad %16 %31 +OpImageWrite %39 %28 %19 +OpBranch %36 +%38 = OpLabel +%95 = OpFunctionCall %void %40 %uint_51 %uint_0 %30 %uint_128 +OpBranch %36 +%36 = OpLabel +OpStore %_entryPointOutput_vColor %19 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%40 = OpFunction %void None %41 +%42 = OpFunctionParameter %uint +%43 = OpFunctionParameter %uint +%44 = OpFunctionParameter %uint +%45 = OpFunctionParameter %uint +%46 = OpLabel +%52 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_0 +%55 = OpAtomicIAdd %uint %52 %uint_4 %uint_0 %uint_9 +%56 = OpIAdd %uint %55 %uint_9 +%57 = OpArrayLength %uint %50 1 +%58 = OpULessThanEqual %bool %56 %57 +OpSelectionMerge %59 None +OpBranchConditional %58 %60 %59 +%60 = OpLabel +%61 = OpIAdd %uint %55 %uint_0 +%63 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %61 +OpStore %63 %uint_9 +%65 = OpIAdd %uint %55 %uint_1 +%66 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %65 +OpStore %66 %uint_23 +%68 = OpIAdd %uint %55 %uint_2 +%69 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %68 +OpStore %69 %42 +%71 = OpIAdd %uint %55 %uint_3 +%72 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %71 +OpStore %72 %uint_4 +%75 = OpLoad %v4float %gl_FragCoord +%77 = OpBitcast %v4uint %75 +%78 = OpCompositeExtract %uint %77 0 +%79 = OpIAdd %uint %55 %uint_4 +%80 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %79 +OpStore %80 %78 +%81 = OpCompositeExtract %uint %77 1 +%83 = OpIAdd %uint %55 %uint_5 +%84 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %83 +OpStore %84 %81 +%86 = OpIAdd %uint %55 %uint_6 +%87 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %86 +OpStore %87 %43 +%89 = OpIAdd %uint %55 %uint_7 +%90 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %89 +OpStore %90 %44 +%92 = OpIAdd %uint %55 %uint_8 +%93 = OpAccessChain %_ptr_StorageBuffer_uint %50 %uint_1 %92 +OpStore %93 %45 +OpBranch %59 +%59 = OpLabel +OpReturn +OpFunctionEnd +)"; + + // SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + defs_before + func_before, defs_after + func_after + output_func, true, + true); +} + +TEST_F(InstBindlessTest, InstrumentVertexSimple) { + // This test verifies that the pass will correctly instrument shader + // doing bindless image write. This test was created by editing the SPIR-V + // from the Simple test. + + const std::string defs_before = + R"(OpCapability Shader +OpCapability Sampled1D +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Vertex %main "main" %_ %coords2D +OpSource GLSL 450 +OpName %main "main" +OpName %lod "lod" +OpName %coords1D "coords1D" +OpName %gl_PerVertex "gl_PerVertex" +OpMemberName %gl_PerVertex 0 "gl_Position" +OpMemberName %gl_PerVertex 1 "gl_PointSize" +OpMemberName %gl_PerVertex 2 "gl_ClipDistance" +OpMemberName %gl_PerVertex 3 "gl_CullDistance" +OpName %_ "" +OpName %texSampler1D "texSampler1D" +OpName %foo "foo" +OpMemberName %foo 0 "g_idx" +OpName %__0 "" +OpName %coords2D "coords2D" +OpMemberDecorate %gl_PerVertex 0 BuiltIn Position +OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize +OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance +OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance +OpDecorate %gl_PerVertex Block +OpDecorate %texSampler1D DescriptorSet 0 +OpDecorate %texSampler1D Binding 3 +OpMemberDecorate %foo 0 Offset 0 +OpDecorate %foo Block +OpDecorate %__0 DescriptorSet 0 +OpDecorate %__0 Binding 5 +OpDecorate %coords2D Location 0 +%void = OpTypeVoid +%3 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_ptr_Function_float = OpTypePointer Function %float +%float_3 = OpConstant %float 3 +%float_1_78900003 = OpConstant %float 1.78900003 +%v4float = OpTypeVector %float 4 +%uint = OpTypeInt 32 0 +%uint_1 = OpConstant %uint 1 +%_arr_float_uint_1 = OpTypeArray %float %uint_1 +%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1 +%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex +%_ = OpVariable %_ptr_Output_gl_PerVertex Output +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%21 = OpTypeImage %float 1D 0 0 0 1 Unknown +%22 = OpTypeSampledImage %21 +%uint_128 = OpConstant %uint 128 +%_arr_22_uint_128 = OpTypeArray %22 %uint_128 +%_ptr_UniformConstant__arr_22_uint_128 = OpTypePointer UniformConstant %_arr_22_uint_128 +%texSampler1D = OpVariable %_ptr_UniformConstant__arr_22_uint_128 UniformConstant +%foo = OpTypeStruct %int +%_ptr_Uniform_foo = OpTypePointer Uniform %foo +%__0 = OpVariable %_ptr_Uniform_foo Uniform +%_ptr_Uniform_int = OpTypePointer Uniform %int +%_ptr_UniformConstant_22 = OpTypePointer UniformConstant %22 +%_ptr_Output_v4float = OpTypePointer Output %v4float +%v2float = OpTypeVector %float 2 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%coords2D = OpVariable %_ptr_Input_v2float Input +)"; + + const std::string defs_after = + R"(OpCapability Shader +OpCapability Sampled1D +OpExtension "SPV_KHR_storage_buffer_storage_class" +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Vertex %main "main" %_ %coords2D %gl_VertexID %gl_InstanceID +OpSource GLSL 450 +OpName %main "main" +OpName %lod "lod" +OpName %coords1D "coords1D" +OpName %gl_PerVertex "gl_PerVertex" +OpMemberName %gl_PerVertex 0 "gl_Position" +OpMemberName %gl_PerVertex 1 "gl_PointSize" +OpMemberName %gl_PerVertex 2 "gl_ClipDistance" +OpMemberName %gl_PerVertex 3 "gl_CullDistance" +OpName %_ "" +OpName %texSampler1D "texSampler1D" +OpName %foo "foo" +OpMemberName %foo 0 "g_idx" +OpName %__0 "" +OpName %coords2D "coords2D" +OpMemberDecorate %gl_PerVertex 0 BuiltIn Position +OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize +OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance +OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance +OpDecorate %gl_PerVertex Block +OpDecorate %texSampler1D DescriptorSet 0 +OpDecorate %texSampler1D Binding 3 +OpMemberDecorate %foo 0 Offset 0 +OpDecorate %foo Block +OpDecorate %__0 DescriptorSet 0 +OpDecorate %__0 Binding 5 +OpDecorate %coords2D Location 0 +OpDecorate %_struct_61 Block +OpMemberDecorate %_struct_61 0 Offset 0 +OpMemberDecorate %_struct_61 1 Offset 4 +OpDecorate %63 DescriptorSet 7 +OpDecorate %63 Binding 0 +OpDecorate %gl_VertexID BuiltIn VertexId +OpDecorate %gl_InstanceID BuiltIn InstanceId +%void = OpTypeVoid +%12 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_ptr_Function_float = OpTypePointer Function %float +%float_3 = OpConstant %float 3 +%float_1_78900003 = OpConstant %float 1.78900003 +%v4float = OpTypeVector %float 4 +%uint = OpTypeInt 32 0 +%uint_1 = OpConstant %uint 1 +%_arr_float_uint_1 = OpTypeArray %float %uint_1 +%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1 +%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex +%_ = OpVariable %_ptr_Output_gl_PerVertex Output +%int = OpTypeInt 32 1 +%int_0 = OpConstant %int 0 +%24 = OpTypeImage %float 1D 0 0 0 1 Unknown +%25 = OpTypeSampledImage %24 +%uint_128 = OpConstant %uint 128 +%_arr_25_uint_128 = OpTypeArray %25 %uint_128 +%_ptr_UniformConstant__arr_25_uint_128 = OpTypePointer UniformConstant %_arr_25_uint_128 +%texSampler1D = OpVariable %_ptr_UniformConstant__arr_25_uint_128 UniformConstant +%foo = OpTypeStruct %int +%_ptr_Uniform_foo = OpTypePointer Uniform %foo +%__0 = OpVariable %_ptr_Uniform_foo Uniform +%_ptr_Uniform_int = OpTypePointer Uniform %int +%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %25 +%_ptr_Output_v4float = OpTypePointer Output %v4float +%v2float = OpTypeVector %float 2 +%_ptr_Input_v2float = OpTypePointer Input %v2float +%coords2D = OpVariable %_ptr_Input_v2float Input +%uint_0 = OpConstant %uint 0 +%bool = OpTypeBool +%54 = OpTypeFunction %void %uint %uint %uint %uint +%_runtimearr_uint = OpTypeRuntimeArray %uint +%_struct_61 = OpTypeStruct %uint %_runtimearr_uint +%_ptr_StorageBuffer__struct_61 = OpTypePointer StorageBuffer %_struct_61 +%63 = OpVariable %_ptr_StorageBuffer__struct_61 StorageBuffer +%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint +%uint_9 = OpConstant %uint 9 +%uint_4 = OpConstant %uint 4 +%uint_23 = OpConstant %uint 23 +%uint_2 = OpConstant %uint 2 +%uint_3 = OpConstant %uint 3 +%_ptr_Input_uint = OpTypePointer Input %uint +%gl_VertexID = OpVariable %_ptr_Input_uint Input +%gl_InstanceID = OpVariable %_ptr_Input_uint Input +%uint_5 = OpConstant %uint 5 +%uint_6 = OpConstant %uint 6 +%uint_7 = OpConstant %uint 7 +%uint_8 = OpConstant %uint 8 +%uint_74 = OpConstant %uint 74 +%106 = OpConstantNull %v4float +)"; + + const std::string func_before = + R"(%main = OpFunction %void None %3 +%5 = OpLabel +%lod = OpVariable %_ptr_Function_float Function +%coords1D = OpVariable %_ptr_Function_float Function +OpStore %lod %float_3 +OpStore %coords1D %float_1_78900003 +%31 = OpAccessChain %_ptr_Uniform_int %__0 %int_0 +%32 = OpLoad %int %31 +%34 = OpAccessChain %_ptr_UniformConstant_22 %texSampler1D %32 +%35 = OpLoad %22 %34 +%36 = OpLoad %float %coords1D +%37 = OpLoad %float %lod +%38 = OpImageSampleExplicitLod %v4float %35 %36 Lod %37 +%40 = OpAccessChain %_ptr_Output_v4float %_ %int_0 +OpStore %40 %38 +OpReturn +OpFunctionEnd +)"; + + const std::string func_after = + R"(%main = OpFunction %void None %12 +%35 = OpLabel +%lod = OpVariable %_ptr_Function_float Function +%coords1D = OpVariable %_ptr_Function_float Function +OpStore %lod %float_3 +OpStore %coords1D %float_1_78900003 +%36 = OpAccessChain %_ptr_Uniform_int %__0 %int_0 +%37 = OpLoad %int %36 +%38 = OpAccessChain %_ptr_UniformConstant_25 %texSampler1D %37 +%39 = OpLoad %25 %38 +%40 = OpLoad %float %coords1D +%41 = OpLoad %float %lod +%46 = OpULessThan %bool %37 %uint_128 +OpSelectionMerge %47 None +OpBranchConditional %46 %48 %49 +%48 = OpLabel +%50 = OpLoad %25 %38 +%51 = OpImageSampleExplicitLod %v4float %50 %40 Lod %41 +OpBranch %47 +%49 = OpLabel +%52 = OpBitcast %uint %37 +%105 = OpFunctionCall %void %53 %uint_74 %uint_0 %52 %uint_128 +OpBranch %47 +%47 = OpLabel +%107 = OpPhi %v4float %51 %48 %106 %49 +%43 = OpAccessChain %_ptr_Output_v4float %_ %int_0 +OpStore %43 %107 +OpReturn +OpFunctionEnd +)"; + + const std::string output_func = + R"(%53 = OpFunction %void None %54 +%55 = OpFunctionParameter %uint +%56 = OpFunctionParameter %uint +%57 = OpFunctionParameter %uint +%58 = OpFunctionParameter %uint +%59 = OpLabel +%65 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_0 +%68 = OpAtomicIAdd %uint %65 %uint_4 %uint_0 %uint_9 +%69 = OpIAdd %uint %68 %uint_9 +%70 = OpArrayLength %uint %63 1 +%71 = OpULessThanEqual %bool %69 %70 +OpSelectionMerge %72 None +OpBranchConditional %71 %73 %72 +%73 = OpLabel +%74 = OpIAdd %uint %68 %uint_0 +%75 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %74 +OpStore %75 %uint_9 +%77 = OpIAdd %uint %68 %uint_1 +%78 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %77 +OpStore %78 %uint_23 +%80 = OpIAdd %uint %68 %uint_2 +%81 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %80 +OpStore %81 %55 +%83 = OpIAdd %uint %68 %uint_3 +%84 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %83 +OpStore %84 %uint_0 +%87 = OpLoad %uint %gl_VertexID +%88 = OpIAdd %uint %68 %uint_4 +%89 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %88 +OpStore %89 %87 +%91 = OpLoad %uint %gl_InstanceID +%93 = OpIAdd %uint %68 %uint_5 +%94 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %93 +OpStore %94 %91 +%96 = OpIAdd %uint %68 %uint_6 +%97 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %96 +OpStore %97 %56 +%99 = OpIAdd %uint %68 %uint_7 +%100 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %99 +OpStore %100 %57 +%102 = OpIAdd %uint %68 %uint_8 +%103 = OpAccessChain %_ptr_StorageBuffer_uint %63 %uint_1 %102 +OpStore %103 %58 +OpBranch %72 +%72 = OpLabel +OpReturn +OpFunctionEnd +)"; + + // SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndCheck( + defs_before + func_before, defs_after + func_after + output_func, true, + true); +} + +// TODO(greg-lunarg): Add tests to verify handling of these cases: +// +// TODO(greg-lunarg): Come up with cases to put here :) + +} // namespace +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/instruction_test.cpp b/3rdparty/spirv-tools/test/opt/instruction_test.cpp index 2ace6b8ac..a6972011f 100644 --- a/3rdparty/spirv-tools/test/opt/instruction_test.cpp +++ b/3rdparty/spirv-tools/test/opt/instruction_test.cpp @@ -622,6 +622,35 @@ TEST_F(GetBaseTest, SampleImage) { EXPECT_TRUE(load->GetBaseAddress() == base); } +TEST_F(GetBaseTest, PtrAccessChain) { + const std::string text = R"( + OpCapability VariablePointers + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "PSMain" %2 + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %4 = OpTypeFunction %void + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 + %int = OpTypeInt 32 8388353 + %int_0 = OpConstant %int 0 +%_ptr_Function_v4float = OpTypePointer Function %v4float + %2 = OpVariable %_ptr_Function_v4float Input + %1 = OpFunction %void None %4 + %10 = OpLabel + %11 = OpPtrAccessChain %_ptr_Function_v4float %2 %int_0 + %12 = OpLoad %v4float %11 + OpReturn + OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_2, nullptr, text); + Instruction* load = context->get_def_use_mgr()->GetDef(12); + Instruction* base = context->get_def_use_mgr()->GetDef(2); + EXPECT_TRUE(load->GetBaseAddress() == base); +} + TEST_F(GetBaseTest, ImageRead) { const std::string text = R"( OpCapability Shader diff --git a/3rdparty/spirv-tools/test/opt/ir_builder.cpp b/3rdparty/spirv-tools/test/opt/ir_builder.cpp index 7eeb86dd3..f800ca437 100644 --- a/3rdparty/spirv-tools/test/opt/ir_builder.cpp +++ b/3rdparty/spirv-tools/test/opt/ir_builder.cpp @@ -17,6 +17,7 @@ #include #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "source/opt/basic_block.h" @@ -26,16 +27,10 @@ #include "source/opt/type_manager.h" #include "spirv-tools/libspirv.hpp" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { -#ifdef SPIRV_EFFCEE - using Analysis = IRContext::Analysis; using IRBuilderTest = ::testing::Test; @@ -182,7 +177,7 @@ TEST_F(IRBuilderTest, TestCondBranchAddition) { %5 = OpTypeVoid %6 = OpTypeFunction %5 %7 = OpTypeBool - %8 = OpTypePointer Function %7 + %8 = OpTypePointer Private %7 %9 = OpConstantTrue %7 %10 = OpTypeFloat 32 %11 = OpTypeVector %10 4 @@ -203,6 +198,7 @@ TEST_F(IRBuilderTest, TestCondBranchAddition) { BasicBlock& bb_merge = *fn.begin(); + // TODO(1841): Handle id overflow. fn.begin().InsertBefore(std::unique_ptr( new BasicBlock(std::unique_ptr(new Instruction( context.get(), SpvOpLabel, 0, context->TakeNextId(), {}))))); @@ -212,6 +208,7 @@ TEST_F(IRBuilderTest, TestCondBranchAddition) { builder.AddBranch(bb_merge.id()); } + // TODO(1841): Handle id overflow. fn.begin().InsertBefore(std::unique_ptr( new BasicBlock(std::unique_ptr(new Instruction( context.get(), SpvOpLabel, 0, context->TakeNextId(), {}))))); @@ -322,20 +319,20 @@ OpFunctionEnd InstructionBuilder builder(context.get(), &*context->module()->begin()->begin()->begin()); - EXPECT_NE(nullptr, builder.Add32BitUnsignedIntegerConstant(13)); - EXPECT_NE(nullptr, builder.Add32BitSignedIntegerConstant(-1)); + EXPECT_NE(nullptr, builder.GetUintConstant(13)); + EXPECT_NE(nullptr, builder.GetSintConstant(-1)); // Try adding the same constants again to make sure they aren't added. - EXPECT_NE(nullptr, builder.Add32BitUnsignedIntegerConstant(13)); - EXPECT_NE(nullptr, builder.Add32BitSignedIntegerConstant(-1)); + EXPECT_NE(nullptr, builder.GetUintConstant(13)); + EXPECT_NE(nullptr, builder.GetSintConstant(-1)); // Try adding different constants to make sure the type is reused. - EXPECT_NE(nullptr, builder.Add32BitUnsignedIntegerConstant(1)); - EXPECT_NE(nullptr, builder.Add32BitSignedIntegerConstant(34)); + EXPECT_NE(nullptr, builder.GetUintConstant(1)); + EXPECT_NE(nullptr, builder.GetSintConstant(34)); // Try adding 0 as both signed and unsigned. - EXPECT_NE(nullptr, builder.Add32BitUnsignedIntegerConstant(0)); - EXPECT_NE(nullptr, builder.Add32BitSignedIntegerConstant(0)); + EXPECT_NE(nullptr, builder.GetUintConstant(0)); + EXPECT_NE(nullptr, builder.GetSintConstant(0)); Match(text, context.get()); } @@ -367,25 +364,25 @@ OpFunctionEnd InstructionBuilder builder(context.get(), &*context->module()->begin()->begin()->begin()); - Instruction* const_1 = builder.Add32BitUnsignedIntegerConstant(13); - Instruction* const_2 = builder.Add32BitSignedIntegerConstant(-1); + Instruction* const_1 = builder.GetUintConstant(13); + Instruction* const_2 = builder.GetSintConstant(-1); EXPECT_NE(nullptr, const_1); EXPECT_NE(nullptr, const_2); // Try adding the same constants again to make sure they aren't added. - EXPECT_EQ(const_1, builder.Add32BitUnsignedIntegerConstant(13)); - EXPECT_EQ(const_2, builder.Add32BitSignedIntegerConstant(-1)); + EXPECT_EQ(const_1, builder.GetUintConstant(13)); + EXPECT_EQ(const_2, builder.GetSintConstant(-1)); - Instruction* const_3 = builder.Add32BitUnsignedIntegerConstant(1); - Instruction* const_4 = builder.Add32BitSignedIntegerConstant(34); + Instruction* const_3 = builder.GetUintConstant(1); + Instruction* const_4 = builder.GetSintConstant(34); // Try adding different constants to make sure the type is reused. EXPECT_NE(nullptr, const_3); EXPECT_NE(nullptr, const_4); - Instruction* const_5 = builder.Add32BitUnsignedIntegerConstant(0); - Instruction* const_6 = builder.Add32BitSignedIntegerConstant(0); + Instruction* const_5 = builder.GetUintConstant(0); + Instruction* const_6 = builder.GetSintConstant(0); // Try adding 0 as both signed and unsigned. EXPECT_NE(nullptr, const_5); @@ -409,7 +406,33 @@ OpFunctionEnd Match(text, context.get()); } -#endif // SPIRV_EFFCEE +TEST_F(IRBuilderTest, AccelerationStructureNV) { + const std::string text = R"( +; CHECK: OpTypeAccelerationStructureNV +OpCapability Shader +OpCapability RayTracingNV +OpExtension "SPV_NV_ray_tracing" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %8 "main" +OpExecutionMode %8 OriginUpperLeft +%1 = OpTypeVoid +%2 = OpTypeBool +%3 = OpTypeAccelerationStructureNV +%7 = OpTypeFunction %1 +%8 = OpFunction %1 None %7 +%9 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_2, nullptr, text); + EXPECT_NE(nullptr, context); + + InstructionBuilder builder(context.get(), + &*context->module()->begin()->begin()->begin()); + Match(text, context.get()); +} } // namespace } // namespace opt diff --git a/3rdparty/spirv-tools/test/opt/ir_context_test.cpp b/3rdparty/spirv-tools/test/opt/ir_context_test.cpp index c64e5b04f..4e2f5b2c4 100644 --- a/3rdparty/spirv-tools/test/opt/ir_context_test.cpp +++ b/3rdparty/spirv-tools/test/opt/ir_context_test.cpp @@ -30,6 +30,7 @@ namespace { using Analysis = IRContext::Analysis; using ::testing::Each; +using ::testing::UnorderedElementsAre; class DummyPassPreservesNothing : public Pass { public: @@ -217,6 +218,64 @@ TEST_F(IRContextTest, KillMemberName) { } } +TEST_F(IRContextTest, KillGroupDecoration) { + const std::string text = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource GLSL 430 + OpDecorate %3 Restrict + %3 = OpDecorationGroup + OpGroupDecorate %3 %4 %5 + %6 = OpTypeFloat 32 + %7 = OpTypePointer Function %6 + %8 = OpTypeStruct %6 + %9 = OpTypeVoid + %10 = OpTypeFunction %9 + %2 = OpFunction %9 None %10 + %11 = OpLabel + %4 = OpVariable %7 Function + %5 = OpVariable %7 Function + OpReturn + OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_2, nullptr, text); + + // Build the decoration manager. + context->get_decoration_mgr(); + + // Delete the second variable. + context->KillDef(5); + + // The three decorations instructions should still be there. The first two + // should be the same, but the third should have %5 removed. + + // Check the OpDecorate instruction + auto inst = context->annotation_begin(); + EXPECT_EQ(inst->opcode(), SpvOpDecorate); + EXPECT_EQ(inst->GetSingleWordInOperand(0), 3); + + // Check the OpDecorationGroup Instruction + ++inst; + EXPECT_EQ(inst->opcode(), SpvOpDecorationGroup); + EXPECT_EQ(inst->result_id(), 3); + + // Check that %5 is no longer part of the group. + ++inst; + EXPECT_EQ(inst->opcode(), SpvOpGroupDecorate); + EXPECT_EQ(inst->NumInOperands(), 2); + EXPECT_EQ(inst->GetSingleWordInOperand(0), 3); + EXPECT_EQ(inst->GetSingleWordInOperand(1), 4); + + // Check that we are at the end. + ++inst; + EXPECT_EQ(inst, context->annotation_end()); +} + TEST_F(IRContextTest, TakeNextUniqueIdIncrementing) { const uint32_t NUM_TESTS = 1000; IRContext localContext(SPV_ENV_UNIVERSAL_1_2, nullptr); @@ -224,6 +283,387 @@ TEST_F(IRContextTest, TakeNextUniqueIdIncrementing) { EXPECT_EQ(i, localContext.TakeNextUniqueId()); } +TEST_F(IRContextTest, KillGroupDecorationWitNoDecorations) { + const std::string text = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource GLSL 430 + %3 = OpDecorationGroup + OpGroupDecorate %3 %4 %5 + %6 = OpTypeFloat 32 + %7 = OpTypePointer Function %6 + %8 = OpTypeStruct %6 + %9 = OpTypeVoid + %10 = OpTypeFunction %9 + %2 = OpFunction %9 None %10 + %11 = OpLabel + %4 = OpVariable %7 Function + %5 = OpVariable %7 Function + OpReturn + OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_2, nullptr, text); + + // Build the decoration manager. + context->get_decoration_mgr(); + + // Delete the second variable. + context->KillDef(5); + + // The two decoration instructions should still be there. The first one + // should be the same, but the second should have %5 removed. + + // Check the OpDecorationGroup Instruction + auto inst = context->annotation_begin(); + EXPECT_EQ(inst->opcode(), SpvOpDecorationGroup); + EXPECT_EQ(inst->result_id(), 3); + + // Check that %5 is no longer part of the group. + ++inst; + EXPECT_EQ(inst->opcode(), SpvOpGroupDecorate); + EXPECT_EQ(inst->NumInOperands(), 2); + EXPECT_EQ(inst->GetSingleWordInOperand(0), 3); + EXPECT_EQ(inst->GetSingleWordInOperand(1), 4); + + // Check that we are at the end. + ++inst; + EXPECT_EQ(inst, context->annotation_end()); +} + +TEST_F(IRContextTest, KillDecorationGroup) { + const std::string text = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource GLSL 430 + %3 = OpDecorationGroup + OpGroupDecorate %3 %4 %5 + %6 = OpTypeFloat 32 + %7 = OpTypePointer Function %6 + %8 = OpTypeStruct %6 + %9 = OpTypeVoid + %10 = OpTypeFunction %9 + %2 = OpFunction %9 None %10 + %11 = OpLabel + %4 = OpVariable %7 Function + %5 = OpVariable %7 Function + OpReturn + OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_2, nullptr, text); + + // Build the decoration manager. + context->get_decoration_mgr(); + + // Delete the second variable. + context->KillDef(3); + + // Check the OpDecorationGroup Instruction is still there. + EXPECT_TRUE(context->annotations().empty()); +} + +TEST_F(IRContextTest, BasicVisitFromEntryPoint) { + // Make sure we visit the entry point, and the function it calls. + // Do not visit Dead or Exported. + const std::string text = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %10 "main" + OpName %10 "main" + OpName %Dead "Dead" + OpName %11 "Constant" + OpName %ExportedFunc "ExportedFunc" + OpDecorate %ExportedFunc LinkageAttributes "ExportedFunc" Export + %void = OpTypeVoid + %6 = OpTypeFunction %void + %10 = OpFunction %void None %6 + %14 = OpLabel + %15 = OpFunctionCall %void %11 + %16 = OpFunctionCall %void %11 + OpReturn + OpFunctionEnd + %11 = OpFunction %void None %6 + %18 = OpLabel + OpReturn + OpFunctionEnd + %Dead = OpFunction %void None %6 + %19 = OpLabel + OpReturn + OpFunctionEnd +%ExportedFunc = OpFunction %void None %7 + %20 = OpLabel + %21 = OpFunctionCall %void %11 + OpReturn + OpFunctionEnd +)"; + // clang-format on + + std::unique_ptr localContext = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" + << text << std::endl; + std::vector processed; + Pass::ProcessFunction mark_visited = [&processed](Function* fp) { + processed.push_back(fp->result_id()); + return false; + }; + localContext->ProcessEntryPointCallTree(mark_visited); + EXPECT_THAT(processed, UnorderedElementsAre(10, 11)); +} + +TEST_F(IRContextTest, BasicVisitReachable) { + // Make sure we visit the entry point, exported function, and the function + // they call. Do not visit Dead. + const std::string text = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %10 "main" + OpName %10 "main" + OpName %Dead "Dead" + OpName %11 "Constant" + OpName %12 "ExportedFunc" + OpName %13 "Constant2" + OpDecorate %12 LinkageAttributes "ExportedFunc" Export + %void = OpTypeVoid + %6 = OpTypeFunction %void + %10 = OpFunction %void None %6 + %14 = OpLabel + %15 = OpFunctionCall %void %11 + %16 = OpFunctionCall %void %11 + OpReturn + OpFunctionEnd + %11 = OpFunction %void None %6 + %18 = OpLabel + OpReturn + OpFunctionEnd + %Dead = OpFunction %void None %6 + %19 = OpLabel + OpReturn + OpFunctionEnd + %12 = OpFunction %void None %6 + %20 = OpLabel + %21 = OpFunctionCall %void %13 + OpReturn + OpFunctionEnd + %13 = OpFunction %void None %6 + %22 = OpLabel + OpReturn + OpFunctionEnd +)"; + // clang-format on + + std::unique_ptr localContext = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" + << text << std::endl; + + std::vector processed; + Pass::ProcessFunction mark_visited = [&processed](Function* fp) { + processed.push_back(fp->result_id()); + return false; + }; + localContext->ProcessReachableCallTree(mark_visited); + EXPECT_THAT(processed, UnorderedElementsAre(10, 11, 12, 13)); +} + +TEST_F(IRContextTest, BasicVisitOnlyOnce) { + // Make sure we visit %12 only once, even if it is called from two different + // functions. + const std::string text = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %10 "main" + OpName %10 "main" + OpName %Dead "Dead" + OpName %11 "Constant" + OpName %12 "ExportedFunc" + OpDecorate %12 LinkageAttributes "ExportedFunc" Export + %void = OpTypeVoid + %6 = OpTypeFunction %void + %10 = OpFunction %void None %6 + %14 = OpLabel + %15 = OpFunctionCall %void %11 + %16 = OpFunctionCall %void %12 + OpReturn + OpFunctionEnd + %11 = OpFunction %void None %6 + %18 = OpLabel + %19 = OpFunctionCall %void %12 + OpReturn + OpFunctionEnd + %Dead = OpFunction %void None %6 + %20 = OpLabel + OpReturn + OpFunctionEnd + %12 = OpFunction %void None %6 + %21 = OpLabel + OpReturn + OpFunctionEnd +)"; + // clang-format on + + std::unique_ptr localContext = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" + << text << std::endl; + + std::vector processed; + Pass::ProcessFunction mark_visited = [&processed](Function* fp) { + processed.push_back(fp->result_id()); + return false; + }; + localContext->ProcessReachableCallTree(mark_visited); + EXPECT_THAT(processed, UnorderedElementsAre(10, 11, 12)); +} + +TEST_F(IRContextTest, BasicDontVisitExportedVariable) { + // Make sure we only visit functions and not exported variables. + const std::string text = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %10 "main" + OpExecutionMode %10 OriginUpperLeft + OpSource GLSL 150 + OpName %10 "main" + OpName %12 "export_var" + OpDecorate %12 LinkageAttributes "export_var" Export + %void = OpTypeVoid + %6 = OpTypeFunction %void + %float = OpTypeFloat 32 + %float_1 = OpConstant %float 1 + %12 = OpVariable %float Output + %10 = OpFunction %void None %6 + %14 = OpLabel + OpStore %12 %float_1 + OpReturn + OpFunctionEnd +)"; + // clang-format on + + std::unique_ptr localContext = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" + << text << std::endl; + + std::vector processed; + Pass::ProcessFunction mark_visited = [&processed](Function* fp) { + processed.push_back(fp->result_id()); + return false; + }; + localContext->ProcessReachableCallTree(mark_visited); + EXPECT_THAT(processed, UnorderedElementsAre(10)); +} + +TEST_F(IRContextTest, IdBoundTestAtLimit) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound); + uint32_t next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, 0); + EXPECT_EQ(current_bound, context->module()->id_bound()); + next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, 0); +} + +TEST_F(IRContextTest, IdBoundTestBelowLimit) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound + 100); + uint32_t next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, current_bound); + EXPECT_EQ(current_bound + 1, context->module()->id_bound()); + next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, current_bound + 1); +} + +TEST_F(IRContextTest, IdBoundTestNearLimit) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound + 1); + uint32_t next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, current_bound); + EXPECT_EQ(current_bound + 1, context->module()->id_bound()); + next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, 0); +} + +TEST_F(IRContextTest, IdBoundTestUIntMax) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4294967294 = OpLabel ; ID is UINT_MAX-1 +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + uint32_t current_bound = context->module()->id_bound(); + + // Expecting |BuildModule| to preserve the numeric ids. + EXPECT_EQ(current_bound, std::numeric_limits::max()); + + context->set_max_id_bound(current_bound); + uint32_t next_id_bound = context->TakeNextId(); + EXPECT_EQ(next_id_bound, 0); + EXPECT_EQ(current_bound, context->module()->id_bound()); +} } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/local_access_chain_convert_test.cpp b/3rdparty/spirv-tools/test/opt/local_access_chain_convert_test.cpp index cb3572161..154824b1e 100644 --- a/3rdparty/spirv-tools/test/opt/local_access_chain_convert_test.cpp +++ b/3rdparty/spirv-tools/test/opt/local_access_chain_convert_test.cpp @@ -24,8 +24,6 @@ namespace { using LocalAccessChainConvertTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE - TEST_F(LocalAccessChainConvertTest, StructOfVecsOfFloatConverted) { // #version 140 // @@ -625,7 +623,6 @@ OpFunctionEnd SinglePassRunAndMatch(predefs_before + before, true); } -#endif // SPIRV_EFFCEE TEST_F(LocalAccessChainConvertTest, DynamicallyIndexedVarNotConverted) { // #version 140 diff --git a/3rdparty/spirv-tools/test/opt/local_redundancy_elimination_test.cpp b/3rdparty/spirv-tools/test/opt/local_redundancy_elimination_test.cpp index bdaafb85f..bc4635e29 100644 --- a/3rdparty/spirv-tools/test/opt/local_redundancy_elimination_test.cpp +++ b/3rdparty/spirv-tools/test/opt/local_redundancy_elimination_test.cpp @@ -29,7 +29,6 @@ using ::testing::HasSubstr; using ::testing::MatchesRegex; using LocalRedundancyEliminationTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE // Remove an instruction when it was already computed. TEST_F(LocalRedundancyEliminationTest, RemoveRedundantAdd) { const std::string text = R"( @@ -154,7 +153,6 @@ TEST_F(LocalRedundancyEliminationTest, KeepInstructionsInDifferentBlocks) { )"; SinglePassRunAndMatch(text, false); } -#endif } // namespace } // namespace opt diff --git a/3rdparty/spirv-tools/test/opt/local_single_block_elim.cpp b/3rdparty/spirv-tools/test/opt/local_single_block_elim.cpp index da7540e6b..e2efc5e3c 100644 --- a/3rdparty/spirv-tools/test/opt/local_single_block_elim.cpp +++ b/3rdparty/spirv-tools/test/opt/local_single_block_elim.cpp @@ -865,7 +865,9 @@ OpReturn OpFunctionEnd )"; + // Relax logical pointers to allow pointer allocations. SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + ValidatorOptions()->relax_logical_pointer = true; SinglePassRunAndCheck(before, after, true, true); } diff --git a/3rdparty/spirv-tools/test/opt/local_single_store_elim_test.cpp b/3rdparty/spirv-tools/test/opt/local_single_store_elim_test.cpp index 23e82ba86..5fd0217e3 100644 --- a/3rdparty/spirv-tools/test/opt/local_single_store_elim_test.cpp +++ b/3rdparty/spirv-tools/test/opt/local_single_store_elim_test.cpp @@ -767,7 +767,9 @@ OpReturn OpFunctionEnd )"; + // Relax logical pointers to allow pointer allocations. SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + ValidatorOptions()->relax_logical_pointer = true; SinglePassRunAndCheck(before, after, true, true); } diff --git a/3rdparty/spirv-tools/test/opt/local_ssa_elim_test.cpp b/3rdparty/spirv-tools/test/opt/local_ssa_elim_test.cpp index 33419395b..b2961a23c 100644 --- a/3rdparty/spirv-tools/test/opt/local_ssa_elim_test.cpp +++ b/3rdparty/spirv-tools/test/opt/local_ssa_elim_test.cpp @@ -1528,7 +1528,9 @@ OpReturn OpFunctionEnd )"; + // Relax logical pointers to allow pointer allocations. SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + ValidatorOptions()->relax_logical_pointer = true; SinglePassRunAndCheck(before, after, true, true); } @@ -1624,8 +1626,6 @@ OpFunctionEnd EXPECT_TRUE(status == Pass::Status::SuccessWithChange); } -// TODO(dneto): Add Effcee as required dependency, and make this unconditional. -#ifdef SPIRV_EFFCEE TEST_F(LocalSSAElimTest, CompositeExtractProblem) { const std::string spv_asm = R"( OpCapability Tessellation @@ -1664,6 +1664,7 @@ TEST_F(LocalSSAElimTest, CompositeExtractProblem) { %_ptr_Function__struct_11 = OpTypePointer Function %_struct_11 %2 = OpFunction %void None %4 %33 = OpLabel + %66 = OpVariable %_ptr_Function__arr__struct_11_uint_3 Function %34 = OpLoad %_arr_v4float_uint_3 %16 %35 = OpLoad %_arr_v4float_uint_3 %17 %36 = OpLoad %_arr_v4float_uint_3 %18 @@ -1696,7 +1697,6 @@ TEST_F(LocalSSAElimTest, CompositeExtractProblem) { %63 = OpCompositeExtract %v2float %40 2 %64 = OpCompositeConstruct %_struct_11 %57 %58 %59 %60 %61 %62 %63 %65 = OpCompositeConstruct %_arr__struct_11_uint_3 %48 %56 %64 - %66 = OpVariable %_ptr_Function__arr__struct_11_uint_3 Function %67 = OpLoad %uint %20 ; CHECK OpStore {{%\d+}} [[store_source:%\d+]] @@ -1758,7 +1758,67 @@ TEST_F(LocalSSAElimTest, DecoratedVariable) { SinglePassRunAndMatch(spv_asm, true); } -#endif + +// Test that the RelaxedPrecision decoration on the variable to added to the +// result of the OpPhi instruction. +TEST_F(LocalSSAElimTest, MultipleEdges) { + const std::string spv_asm = R"( + ; CHECK: OpSelectionMerge + ; CHECK: [[header_bb:%\w+]] = OpLabel + ; CHECK-NOT: OpLabel + ; CHECK: OpSwitch {{%\w+}} {{%\w+}} 76 [[bb1:%\w+]] 17 [[bb2:%\w+]] + ; CHECK-SAME: 4 [[bb2]] + ; CHECK: [[bb2]] = OpLabel + ; CHECK-NEXT: OpPhi [[type:%\w+]] [[val:%\w+]] [[header_bb]] %int_0 [[bb1]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %int = OpTypeInt 32 1 + %_ptr_Function_int = OpTypePointer Function %int + %int_0 = OpConstant %int 0 + %bool = OpTypeBool + %true = OpConstantTrue %bool + %false = OpConstantFalse %bool + %int_1 = OpConstant %int 1 + %4 = OpFunction %void None %3 + %5 = OpLabel + %8 = OpVariable %_ptr_Function_int Function + OpBranch %10 + %10 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %14 + %14 = OpLabel + OpBranchConditional %true %11 %12 + %11 = OpLabel + OpSelectionMerge %19 None + OpBranchConditional %false %18 %19 + %18 = OpLabel + OpSelectionMerge %22 None + OpSwitch %int_0 %22 76 %20 17 %21 4 %21 + %20 = OpLabel + %23 = OpLoad %int %8 + OpStore %8 %int_0 + OpBranch %21 + %21 = OpLabel + OpBranch %22 + %22 = OpLabel + OpBranch %19 + %19 = OpLabel + OpBranch %13 + %13 = OpLabel + OpBranch %10 + %12 = OpLabel + OpReturn + OpFunctionEnd + )"; + + SinglePassRunAndMatch(spv_asm, true); +} // TODO(greg-lunarg): Add tests to verify handling of these cases: // diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/CMakeLists.txt b/3rdparty/spirv-tools/test/opt/loop_optimizations/CMakeLists.txt index 8c7971b7f..e3620787d 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/CMakeLists.txt @@ -37,4 +37,5 @@ add_spvtools_unittest(TARGET opt_loops unroll_simple.cpp unswitch.cpp LIBS SPIRV-Tools-opt + PCH_FILE pch_test_opt_loop ) diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_legal.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_legal.cpp index 509516f80..41d796fd9 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_legal.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_legal.cpp @@ -18,15 +18,12 @@ #include #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "source/opt/loop_descriptor.h" #include "source/opt/loop_fusion.h" #include "test/opt/pass_fixture.h" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { @@ -52,7 +49,6 @@ void Match(const std::string& checks, IRContext* context) { std::vector bin; context->module()->ToBinary(&bin, true); EXPECT_TRUE(Validate(bin)); -#ifdef SPIRV_EFFCEE std::string assembly; SpirvTools tools(SPV_ENV_UNIVERSAL_1_2); EXPECT_TRUE( @@ -63,9 +59,6 @@ void Match(const std::string& checks, IRContext* context) { EXPECT_EQ(effcee::Result::Status::Ok, match_result.status()) << match_result.message() << "\nChecking result:\n" << assembly; -#else // ! SPIRV_EFFCEE - (void)checks; -#endif } /* @@ -3184,7 +3177,7 @@ TEST_F(FusionLegalTest, OuterloopWithBreakContinueInInner) { %21 = OpLabel %29 = OpSMod %6 %96 %28 %30 = OpIEqual %17 %29 %9 - OpSelectionMerge %32 None + OpSelectionMerge %23 None OpBranchConditional %30 %31 %48 %31 = OpLabel %44 = OpAccessChain %7 %41 %91 %96 @@ -3231,7 +3224,7 @@ TEST_F(FusionLegalTest, OuterloopWithBreakContinueInInner) { %72 = OpSMod %6 %93 %28 %73 = OpIEqual %17 %72 %9 OpSelectionMerge %75 None - OpBranchConditional %73 %74 %85 + OpBranchConditional %73 %74 %66 %74 = OpLabel %81 = OpAccessChain %7 %38 %92 %93 %82 = OpLoad %6 %81 @@ -3239,8 +3232,6 @@ TEST_F(FusionLegalTest, OuterloopWithBreakContinueInInner) { %84 = OpAccessChain %7 %76 %92 %93 OpStore %84 %83 OpBranch %75 - %85 = OpLabel - OpBranch %66 %75 = OpLabel OpBranch %67 %67 = OpLabel diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_pass.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_pass.cpp index 857ada939..949392375 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_pass.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/fusion_pass.cpp @@ -14,21 +14,16 @@ #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "test/opt/pass_fixture.h" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { using FusionPassTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE - /* Generated from the following GLSL + --eliminate-local-multi-store @@ -717,8 +712,6 @@ TEST_F(FusionPassTest, TooManyRegisters) { SinglePassRunAndMatch(text, true, 5); } -#endif - } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_single_nested_loops.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_single_nested_loops.cpp index 7fa1fb0a0..056f3f025 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_single_nested_loops.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_single_nested_loops.cpp @@ -158,6 +158,52 @@ OpFunctionEnd SinglePassRunAndCheck(before_hoist, after_hoist, true); } +TEST_F(PassClassTest, PreHeaderIsAlsoHeader) { + // Move OpSLessThan out of the inner loop. The preheader for the inner loop + // is the header of the outer loop. The loop merge should not be separated + // from the branch in that block. + const std::string text = R"( + ; CHECK: OpFunction + ; CHECK-NEXT: OpLabel + ; CHECK-NEXT: OpBranch [[header:%\w+]] + ; CHECK: [[header]] = OpLabel + ; CHECK-NEXT: OpSLessThan %bool %int_1 %int_1 + ; CHECK-NEXT: OpLoopMerge + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %void = OpTypeVoid + %4 = OpTypeFunction %void + %int = OpTypeInt 32 1 + %int_1 = OpConstant %int 1 + %bool = OpTypeBool + %2 = OpFunction %void None %4 + %18 = OpLabel + OpBranch %21 + %21 = OpLabel + OpLoopMerge %22 %23 None + OpBranch %24 + %24 = OpLabel + %25 = OpSLessThan %bool %int_1 %int_1 + OpLoopMerge %26 %27 None + OpBranchConditional %25 %27 %26 + %27 = OpLabel + OpBranch %24 + %26 = OpLabel + OpBranch %22 + %23 = OpLabel + OpBranch %21 + %22 = OpLabel + OpReturn + OpFunctionEnd + )"; + + SinglePassRunAndMatch(text, true); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_without_preheader.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_without_preheader.cpp index 9e8d02fac..2e34b0142 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_without_preheader.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/hoist_without_preheader.cpp @@ -45,7 +45,6 @@ void main(){ } } */ -#ifdef SPIRV_EFFCEE TEST_F(PassClassTest, HoistWithoutPreheader) { const std::string text = R"(OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" @@ -117,8 +116,82 @@ OpFunctionEnd SinglePassRunAndMatch(text, false); } -#endif +TEST_F(PassClassTest, HoistWithoutPreheaderAtIdBound) { + const std::string text = R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpSource GLSL 440 +OpName %main "main" +%void = OpTypeVoid +%4 = OpTypeFunction %void +%int = OpTypeInt 32 1 +%_ptr_Function_int = OpTypePointer Function %int +%int_1 = OpConstant %int 1 +%int_2 = OpConstant %int 2 +%int_0 = OpConstant %int 0 +%int_10 = OpConstant %int 10 +%bool = OpTypeBool +%int_5 = OpConstant %int 5 +%main = OpFunction %void None %4 +%13 = OpLabel +OpBranch %14 +%14 = OpLabel +%15 = OpPhi %int %int_0 %13 %16 %17 +OpLoopMerge %25 %17 None +OpBranch %19 +%19 = OpLabel +%20 = OpSLessThan %bool %15 %int_10 +OpBranchConditional %20 %21 %25 +%21 = OpLabel +%22 = OpIEqual %bool %15 %int_5 +OpSelectionMerge %23 None +OpBranchConditional %22 %24 %23 +%24 = OpLabel +OpBranch %25 +%23 = OpLabel +OpBranch %17 +%17 = OpLabel +%16 = OpIAdd %int %15 %int_1 +OpBranch %14 +%25 = OpLabel +%26 = OpPhi %int %int_0 %24 %int_0 %19 %27 %28 +%29 = OpPhi %int %int_0 %24 %int_0 %19 %30 %28 +OpLoopMerge %31 %28 None +OpBranch %32 +%32 = OpLabel +%33 = OpSLessThan %bool %29 %int_10 +OpBranchConditional %33 %34 %31 +%34 = OpLabel +%27 = OpIAdd %int %int_1 %int_2 +OpBranch %28 +%28 = OpLabel +%30 = OpIAdd %int %29 %int_1 +OpBranch %25 +%31 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound); + + auto pass = MakeUnique(); + auto result = pass->Run(context.get()); + EXPECT_EQ(result, Pass::Status::Failure); + + std::vector binary; + context->module()->ToBinary(&binary, false); + std::string optimized_asm; + SpirvTools tools_(SPV_ENV_UNIVERSAL_1_1); + tools_.Disassemble(binary, &optimized_asm); + std::cout << optimized_asm << std::endl; +} } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/lcssa.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/lcssa.cpp index 220772652..ace6ce196 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/lcssa.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/lcssa.cpp @@ -16,6 +16,7 @@ #include #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "source/opt/build_module.h" #include "source/opt/loop_descriptor.h" @@ -24,16 +25,10 @@ #include "test/opt//assembly_builder.h" #include "test/opt/function_utils.h" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { -#ifdef SPIRV_EFFCEE - bool Validate(const std::vector& bin) { spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2; spv_context spvContext = spvContextCreate(target_env); @@ -607,8 +602,6 @@ TEST_F(LCSSATest, LCSSAUseInNonEligiblePhi) { Match(text, context.get()); } -#endif // SPIRV_EFFCEE - } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.cpp new file mode 100644 index 000000000..f4ac7b298 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_test_opt_loop.h" diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.h b/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.h new file mode 100644 index 000000000..4e8106fbf --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/pch_test_opt_loop.h @@ -0,0 +1,25 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "gmock/gmock.h" +#include "source/opt/iterator.h" +#include "source/opt/loop_dependence.h" +#include "source/opt/loop_descriptor.h" +#include "source/opt/pass.h" +#include "source/opt/scalar_analysis.h" +#include "source/opt/tree_iterator.h" +#include "test/opt/assembly_builder.h" +#include "test/opt/function_utils.h" +#include "test/opt/pass_fixture.h" +#include "test/opt/pass_utils.h" diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/peeling.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/peeling.cpp index e5db20b40..10d8add38 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/peeling.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/peeling.cpp @@ -16,16 +16,13 @@ #include #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "source/opt/ir_builder.h" #include "source/opt/loop_descriptor.h" #include "source/opt/loop_peeling.h" #include "test/opt/pass_fixture.h" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { @@ -51,7 +48,6 @@ void Match(const std::string& checks, IRContext* context) { std::vector bin; context->module()->ToBinary(&bin, true); EXPECT_TRUE(Validate(bin)); -#ifdef SPIRV_EFFCEE std::string assembly; SpirvTools tools(SPV_ENV_UNIVERSAL_1_2); EXPECT_TRUE( @@ -62,9 +58,6 @@ void Match(const std::string& checks, IRContext* context) { EXPECT_EQ(effcee::Result::Status::Ok, match_result.status()) << match_result.message() << "\nChecking result:\n" << assembly; -#else // ! SPIRV_EFFCEE - (void)checks; -#endif } /* @@ -139,7 +132,7 @@ TEST_F(PeelingTest, CannotPeel) { } else { InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - loop_count = builder.Add32BitSignedIntegerConstant(10); + loop_count = builder.GetSintConstant(10); } LoopPeeling peel(&*ld.begin(), loop_count); @@ -501,7 +494,7 @@ TEST_F(PeelingTest, SimplePeeling) { InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - Instruction* ten_cst = builder.Add32BitSignedIntegerConstant(10); + Instruction* ten_cst = builder.GetSintConstant(10); LoopPeeling peel(&*ld.begin(), ten_cst); EXPECT_TRUE(peel.CanPeelLoop()); @@ -555,7 +548,7 @@ CHECK-NEXT: OpLoopMerge InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - Instruction* ten_cst = builder.Add32BitSignedIntegerConstant(10); + Instruction* ten_cst = builder.GetSintConstant(10); LoopPeeling peel(&*ld.begin(), ten_cst); EXPECT_TRUE(peel.CanPeelLoop()); @@ -611,7 +604,7 @@ CHECK-NEXT: OpLoopMerge InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - Instruction* ten_cst = builder.Add32BitSignedIntegerConstant(10); + Instruction* ten_cst = builder.GetSintConstant(10); LoopPeeling peel(&*ld.begin(), ten_cst, context->get_def_use_mgr()->GetDef(22)); @@ -664,7 +657,7 @@ CHECK-NEXT: OpLoopMerge InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - Instruction* ten_cst = builder.Add32BitSignedIntegerConstant(10); + Instruction* ten_cst = builder.GetSintConstant(10); LoopPeeling peel(&*ld.begin(), ten_cst, context->get_def_use_mgr()->GetDef(22)); @@ -925,7 +918,7 @@ TEST_F(PeelingTest, DoWhilePeeling) { EXPECT_EQ(ld.NumLoops(), 1u); InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - Instruction* ten_cst = builder.Add32BitUnsignedIntegerConstant(10); + Instruction* ten_cst = builder.GetUintConstant(10); LoopPeeling peel(&*ld.begin(), ten_cst); EXPECT_TRUE(peel.CanPeelLoop()); @@ -975,7 +968,7 @@ CHECK-NEXT: OpLoopMerge InstructionBuilder builder(context.get(), &*f.begin()); // Exit condition. - Instruction* ten_cst = builder.Add32BitUnsignedIntegerConstant(10); + Instruction* ten_cst = builder.GetUintConstant(10); LoopPeeling peel(&*ld.begin(), ten_cst); EXPECT_TRUE(peel.CanPeelLoop()); diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/unroll_simple.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/unroll_simple.cpp index 3b01fdc31..f551e7ca9 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/unroll_simple.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/unroll_simple.cpp @@ -2952,6 +2952,52 @@ OpFunctionEnd EXPECT_NE(loop_2.GetLatchBlock(), loop_2.GetContinueBlock()); } +// Test that a loop with a self-referencing OpPhi instruction is handled +// correctly. +TEST_F(PassClassTest, OpPhiSelfReference) { + const std::string text = R"( + ; Find the two adds from the unrolled loop + ; CHECK: OpIAdd + ; CHECK: OpIAdd + ; CHECK: OpIAdd %uint %uint_0 %uint_1 + ; CHECK-NEXT: OpReturn + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %2 "main" + OpExecutionMode %2 LocalSize 8 8 1 + OpSource HLSL 600 + %uint = OpTypeInt 32 0 + %void = OpTypeVoid + %5 = OpTypeFunction %void +%uint_0 = OpConstant %uint 0 +%uint_1 = OpConstant %uint 1 + %bool = OpTypeBool + %true = OpConstantTrue %bool + %2 = OpFunction %void None %5 + %10 = OpLabel + OpBranch %19 + %19 = OpLabel + %20 = OpPhi %uint %uint_0 %10 %20 %21 + %22 = OpPhi %uint %uint_0 %10 %23 %21 + %24 = OpULessThanEqual %bool %22 %uint_1 + OpLoopMerge %25 %21 Unroll + OpBranchConditional %24 %21 %25 + %21 = OpLabel + %23 = OpIAdd %uint %22 %uint_1 + OpBranch %19 + %25 = OpLabel + %14 = OpIAdd %uint %20 %uint_1 + OpReturn + OpFunctionEnd + )"; + + const bool kFullyUnroll = true; + const uint32_t kUnrollFactor = 0; + SinglePassRunAndMatch(text, true, kFullyUnroll, + kUnrollFactor); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/loop_optimizations/unswitch.cpp b/3rdparty/spirv-tools/test/opt/loop_optimizations/unswitch.cpp index 96a7fc010..dc7073fd5 100644 --- a/3rdparty/spirv-tools/test/opt/loop_optimizations/unswitch.cpp +++ b/3rdparty/spirv-tools/test/opt/loop_optimizations/unswitch.cpp @@ -14,21 +14,16 @@ #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "test/opt/pass_fixture.h" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace { using UnswitchTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE - /* Generated from the following GLSL + --eliminate-local-multi-store @@ -62,13 +57,18 @@ TEST_F(UnswitchTest, SimpleUnswitch) { ; CHECK-NEXT: [[phi_j:%\w+]] = OpPhi %int %int_0 [[loop_f]] [[iv_j:%\w+]] [[continue]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None ; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have i+=1 and j+=2. -; CHECK: [[phi_j:%\w+]] = OpIAdd %int [[phi_j]] %int_1 -; CHECK: [[iv_i]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK: [[iv_j]] = OpIAdd %int [[phi_j]] %int_1 -; CHECK: [[merge]] = OpLabel -; CHECK-NEXT: OpBranch [[if_merge]] +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; [[loop_body]] = OpLabel +; CHECK: OpSelectionMerge [[sel_merge:%\w+]] None +; CHECK: OpBranchConditional %false [[bb1:%\w+]] [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: [[inc_j:%\w+]] = OpIAdd %int [[phi_j]] %int_1 +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: [[inc_i:%\w+]] = OpIAdd %int [[phi_i]] %int_1 +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK: OpBranch [[if_merge]] ; Loop specialized for true. ; CHECK: [[loop_t]] = OpLabel @@ -78,13 +78,18 @@ TEST_F(UnswitchTest, SimpleUnswitch) { ; CHECK-NEXT: [[phi_j:%\w+]] = OpPhi %int %int_0 [[loop_t]] [[iv_j:%\w+]] [[continue]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None ; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have i+=2 and j+=1. -; CHECK: [[phi_i:%\w+]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK: [[iv_i]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK: [[iv_j]] = OpIAdd %int [[phi_j]] %int_1 -; CHECK: [[merge]] = OpLabel -; CHECK-NEXT: OpBranch [[if_merge]] +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; [[loop_body]] = OpLabel +; CHECK: OpSelectionMerge [[sel_merge:%\w+]] None +; CHECK: OpBranchConditional %true [[bb1:%\w+]] [[bb2:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: [[inc_i:%\w+]] = OpIAdd %int [[phi_i]] %int_1 +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: [[inc_j:%\w+]] = OpIAdd %int [[phi_j]] %int_1 +; CHECK-NEXT: OpBranch [[sel_merge]] +; CHECK: [[sel_merge]] = OpLabel +; CHECK: OpBranch [[if_merge]] ; CHECK: [[if_merge]] = OpLabel ; CHECK-NEXT: OpReturn @@ -292,10 +297,10 @@ TEST_F(UnswitchTest, UnswitchContinue) { ; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_f]] [[iv_i:%\w+]] [[continue:%\w+]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None ; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have i+=2. -; CHECK: [[phi_i:%\w+]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK: [[iv_i]] = OpIAdd %int [[phi_i]] %int_1 +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; CHECK: [[loop_body:%\w+]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpBranchConditional %false ; CHECK: [[merge]] = OpLabel ; CHECK-NEXT: OpBranch [[if_merge]] @@ -306,9 +311,10 @@ TEST_F(UnswitchTest, UnswitchContinue) { ; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_t]] [[iv_i:%\w+]] [[continue:%\w+]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None ; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have i+=1. -; CHECK: [[iv_i]] = OpIAdd %int [[phi_i]] %int_1 +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; CHECK: [[loop_body:%\w+]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpBranchConditional %true ; CHECK: [[merge]] = OpLabel ; CHECK-NEXT: OpBranch [[if_merge]] @@ -519,18 +525,40 @@ TEST_F(UnswitchTest, UnswitchSwitch) { ; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_2]] [[iv_i:%\w+]] [[continue:%\w+]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None ; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have i+=1. -; CHECK: [[iv_i]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK: OpBranch [[loop]] +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; CHECK: [[loop_body]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpSwitch %int_2 +; CHECK: [[merge]] = OpLabel +; CHECK-NEXT: OpBranch [[if_merge]] ; Loop specialized for 1. ; CHECK: [[loop_1]] = OpLabel -; CHECK: OpKill +; CHECK-NEXT: OpBranch [[loop:%\w+]] +; CHECK: [[loop]] = OpLabel +; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_1]] [[iv_i:%\w+]] [[continue:%\w+]] +; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None +; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; CHECK: [[loop_body]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpSwitch %int_1 +; CHECK: [[merge]] = OpLabel +; CHECK-NEXT: OpBranch [[if_merge]] ; Loop specialized for 0. ; CHECK: [[loop_0]] = OpLabel -; CHECK: OpReturn +; CHECK-NEXT: OpBranch [[loop:%\w+]] +; CHECK: [[loop]] = OpLabel +; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_0]] [[iv_i:%\w+]] [[continue:%\w+]] +; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None +; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; CHECK: [[loop_body]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpSwitch %int_0 +; CHECK: [[merge]] = OpLabel +; CHECK-NEXT: OpBranch [[if_merge]] ; Loop specialized for the default case. ; CHECK: [[default]] = OpLabel @@ -539,10 +567,12 @@ TEST_F(UnswitchTest, UnswitchSwitch) { ; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[default]] [[iv_i:%\w+]] [[continue:%\w+]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None ; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have i+=1. -; CHECK: [[phi_i:%\w+]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK: OpBranch [[loop]] +; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[loop_body:%\w+]] [[merge]] +; CHECK: [[loop_body]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpSwitch %uint_3 +; CHECK: [[merge]] = OpLabel +; CHECK-NEXT: OpBranch [[if_merge]] ; CHECK: [[if_merge]] = OpLabel ; CHECK-NEXT: OpReturn @@ -628,90 +658,51 @@ void main() { } } } - for (; k < 10; k++) { - if (cond) { - k++; - } - } } */ TEST_F(UnswitchTest, UnSwitchNested) { + // Test that an branch can be unswitched out of two nested loops. const std::string text = R"( ; CHECK: [[cst_cond:%\w+]] = OpFOrdEqual ; CHECK-NEXT: OpSelectionMerge [[if_merge:%\w+]] None ; CHECK-NEXT: OpBranchConditional [[cst_cond]] [[loop_t:%\w+]] [[loop_f:%\w+]] -; Loop specialized for false, one loop is killed, j won't change anymore. +; Loop specialized for false ; CHECK: [[loop_f]] = OpLabel ; CHECK-NEXT: OpBranch [[loop:%\w+]] ; CHECK: [[loop]] = OpLabel -; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_f]] [[iv_i:%\w+]] [[continue:%\w+]] -; CHECK-NEXT: [[phi_j:%\w+]] = OpPhi %int %int_0 [[loop_f]] [[iv_j:%\w+]] [[continue]] +; CHECK-NEXT: {{%\w+}} = OpPhi %int %int_0 [[loop_f]] {{%\w+}} [[continue:%\w+]] +; CHECK-NEXT: {{%\w+}} = OpPhi %int %int_0 [[loop_f]] {{%\w+}} [[continue]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None -; CHECK: [[iv_i]] = OpIAdd %int [[phi_i]] %int_1 -; CHECK-NEXT: OpBranch [[loop]] -; CHECK: OpReturn +; CHECK-NOT: [[merge]] = OpLabel +; CHECK: OpLoopMerge +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpSLessThan +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpBranchConditional %false +; CHECK: [[merge]] = OpLabel -; Loop specialized for true. +; Loop specialized for true. Same as first loop except the branch condition is true. ; CHECK: [[loop_t]] = OpLabel ; CHECK-NEXT: OpBranch [[loop:%\w+]] ; CHECK: [[loop]] = OpLabel -; CHECK-NEXT: [[phi_i:%\w+]] = OpPhi %int %int_0 [[loop_t]] [[iv_i:%\w+]] [[continue:%\w+]] -; CHECK-NEXT: [[phi_j:%\w+]] = OpPhi %int %int_0 [[loop_t]] [[iv_j:%\w+]] [[continue]] +; CHECK-NEXT: {{%\w+}} = OpPhi %int %int_0 [[loop_t]] {{%\w+}} [[continue:%\w+]] +; CHECK-NEXT: {{%\w+}} = OpPhi %int %int_0 [[loop_t]] {{%\w+}} [[continue]] ; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None -; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_i]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] [[pre_loop_inner:%\w+]] [[merge]] - -; CHECK: [[pre_loop_inner]] = OpLabel -; CHECK-NEXT: OpBranch [[loop_inner:%\w+]] -; CHECK-NEXT: [[loop_inner]] = OpLabel -; CHECK-NEXT: [[phi2_i:%\w+]] = OpPhi %int [[phi_i]] [[pre_loop_inner]] [[iv2_i:%\w+]] [[continue2:%\w+]] -; CHECK-NEXT: [[phi2_j:%\w+]] = OpPhi %int [[phi_j]] [[pre_loop_inner]] [[iv2_j:%\w+]] [[continue2]] -; CHECK-NEXT: OpLoopMerge [[merge2:%\w+]] [[continue2]] None - -; CHECK: OpBranch [[continue2]] -; CHECK: [[merge2]] = OpLabel -; CHECK: OpBranch [[continue]] +; CHECK-NOT: [[merge]] = OpLabel +; CHECK: OpLoopMerge +; CHECK-NEXT: OpBranch [[bb1:%\w+]] +; CHECK: [[bb1]] = OpLabel +; CHECK-NEXT: OpSLessThan +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK-NEXT: OpSelectionMerge +; CHECK-NEXT: OpBranchConditional %true ; CHECK: [[merge]] = OpLabel -; Unswitched double nested loop is done. Test the single remaining one. - -; CHECK: [[if_merge]] = OpLabel -; CHECK-NEXT: OpSelectionMerge [[if_merge:%\w+]] None -; CHECK-NEXT: OpBranchConditional [[cst_cond]] [[loop_t:%\w+]] [[loop_f:%\w+]] - -; Loop specialized for false. -; CHECK: [[loop_f]] = OpLabel -; CHECK-NEXT: OpBranch [[loop:%\w+]] -; CHECK: [[loop]] = OpLabel -; CHECK-NEXT: [[phi_k:%\w+]] = OpPhi %int %int_0 [[loop_f]] [[iv_k:%\w+]] [[continue:%\w+]] -; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None -; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_k]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have k+=1 -; CHECK: [[iv_k]] = OpIAdd %int [[phi_k]] %int_1 -; CHECK: OpBranch [[loop]] -; CHECK: [[merge]] = OpLabel -; CHECK-NEXT: OpBranch [[if_merge]] - -; Loop specialized for true. -; CHECK: [[loop_t]] = OpLabel -; CHECK-NEXT: OpBranch [[loop:%\w+]] -; CHECK: [[loop]] = OpLabel -; CHECK-NEXT: [[phi_k:%\w+]] = OpPhi %int %int_0 [[loop_t]] [[iv_k:%\w+]] [[continue:%\w+]] -; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] None -; CHECK: [[loop_exit:%\w+]] = OpSLessThan {{%\w+}} [[phi_k]] {{%\w+}} -; CHECK-NEXT: OpBranchConditional [[loop_exit]] {{%\w+}} [[merge]] -; Check that we have k+=2. -; CHECK: [[tmp_k:%\w+]] = OpIAdd %int [[phi_k]] %int_1 -; CHECK: [[iv_k]] = OpIAdd %int [[tmp_k]] %int_1 -; CHECK: OpBranch [[loop]] -; CHECK: [[merge]] = OpLabel -; CHECK-NEXT: OpBranch [[if_merge]] - -; CHECK: [[if_merge]] = OpLabel -; CHECK-NEXT: OpReturn - OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 @@ -782,34 +773,12 @@ TEST_F(UnswitchTest, UnSwitchNested) { %52 = OpIAdd %int %69 %int_1 OpBranch %26 %28 = OpLabel - OpBranch %53 - %53 = OpLabel - %71 = OpPhi %int %int_0 %28 %66 %56 - OpLoopMerge %55 %56 None - OpBranch %57 - %57 = OpLabel - %59 = OpSLessThan %bool %71 %int_10 - OpBranchConditional %59 %54 %55 - %54 = OpLabel - OpSelectionMerge %62 None - OpBranchConditional %25 %61 %62 - %61 = OpLabel - %64 = OpIAdd %int %71 %int_1 - OpBranch %62 - %62 = OpLabel - %72 = OpPhi %int %71 %54 %64 %61 - OpBranch %56 - %56 = OpLabel - %66 = OpIAdd %int %72 %int_1 - OpBranch %53 - %55 = OpLabel OpReturn OpFunctionEnd )"; SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE /* Generated from the following GLSL + --eliminate-local-multi-store @@ -912,6 +881,87 @@ TEST_F(UnswitchTest, UnswitchNotUniform) { EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); } +TEST_F(UnswitchTest, DontUnswitchLatch) { + // Check that the unswitch is not triggered for the latch branch. + const std::string text = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %bool = OpTypeBool +%false = OpConstantFalse %bool + %4 = OpFunction %void None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpLoopMerge %8 %9 None + OpBranch %7 + %7 = OpLabel + OpBranch %9 + %9 = OpLabel + OpBranchConditional %false %6 %8 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + + auto result = + SinglePassRunAndDisassemble(text, true, false); + EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); +} + +TEST_F(UnswitchTest, DontUnswitchConstantCondition) { + const std::string text = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %main "main" + OpExecutionMode %main OriginLowerLeft + OpSource GLSL 450 + OpName %main "main" + %void = OpTypeVoid + %4 = OpTypeFunction %void + %int = OpTypeInt 32 1 + %int_0 = OpConstant %int 0 + %bool = OpTypeBool + %true = OpConstantTrue %bool + %int_1 = OpConstant %int 1 + %main = OpFunction %void None %4 + %10 = OpLabel + OpBranch %11 + %11 = OpLabel + %12 = OpPhi %int %int_0 %10 %13 %14 + OpLoopMerge %15 %14 None + OpBranch %16 + %16 = OpLabel + %17 = OpSLessThan %bool %12 %int_1 + OpBranchConditional %17 %18 %15 + %18 = OpLabel + OpSelectionMerge %19 None + OpBranchConditional %true %20 %19 + %20 = OpLabel + %21 = OpIAdd %int %12 %int_1 + OpBranch %19 + %19 = OpLabel + %22 = OpPhi %int %21 %20 %12 %18 + OpBranch %14 + %14 = OpLabel + %13 = OpIAdd %int %22 %int_1 + OpBranch %11 + %15 = OpLabel + OpReturn + OpFunctionEnd + )"; + + auto result = + SinglePassRunAndDisassemble(text, true, false); + EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/module_test.cpp b/3rdparty/spirv-tools/test/opt/module_test.cpp index c4f450ea9..569cf9bcd 100644 --- a/3rdparty/spirv-tools/test/opt/module_test.cpp +++ b/3rdparty/spirv-tools/test/opt/module_test.cpp @@ -139,6 +139,95 @@ OpFunctionEnd)"; EXPECT_EQ(text, str.str()); } +TEST(ModuleTest, IdBoundTestAtLimit) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = BuildModule(text); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound); + uint32_t next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, 0); + EXPECT_EQ(current_bound, context->module()->id_bound()); + next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, 0); +} + +TEST(ModuleTest, IdBoundTestBelowLimit) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = BuildModule(text); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound + 100); + uint32_t next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, current_bound); + EXPECT_EQ(current_bound + 1, context->module()->id_bound()); + next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, current_bound + 1); +} + +TEST(ModuleTest, IdBoundTestNearLimit) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = BuildModule(text); + uint32_t current_bound = context->module()->id_bound(); + context->set_max_id_bound(current_bound + 1); + uint32_t next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, current_bound); + EXPECT_EQ(current_bound + 1, context->module()->id_bound()); + next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, 0); +} + +TEST(ModuleTest, IdBoundTestUIntMax) { + const std::string text = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4294967294 = OpLabel ; ID is UINT_MAX-1 +OpReturn +OpFunctionEnd)"; + + std::unique_ptr context = BuildModule(text); + uint32_t current_bound = context->module()->id_bound(); + + // Expecting |BuildModule| to preserve the numeric ids. + EXPECT_EQ(current_bound, std::numeric_limits::max()); + + context->set_max_id_bound(current_bound); + uint32_t next_id_bound = context->module()->TakeNextIdBound(); + EXPECT_EQ(next_id_bound, 0); + EXPECT_EQ(current_bound, context->module()->id_bound()); +} } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/pass_fixture.h b/3rdparty/spirv-tools/test/opt/pass_fixture.h index 9d9eb3661..da2e00ee8 100644 --- a/3rdparty/spirv-tools/test/opt/pass_fixture.h +++ b/3rdparty/spirv-tools/test/opt/pass_fixture.h @@ -22,17 +22,15 @@ #include #include +#include "effcee/effcee.h" #include "gtest/gtest.h" #include "source/opt/build_module.h" #include "source/opt/pass_manager.h" #include "source/opt/passes.h" +#include "source/spirv_validator_options.h" #include "source/util/make_unique.h" #include "spirv-tools/libspirv.hpp" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { @@ -47,7 +45,9 @@ template class PassTest : public TestT { public: PassTest() - : consumer_(nullptr), + : consumer_( + [](spv_message_level_t, const char*, const spv_position_t&, + const char* message) { std::cerr << message << std::endl; }), context_(nullptr), tools_(SPV_ENV_UNIVERSAL_1_1), manager_(new PassManager()), @@ -101,7 +101,8 @@ class PassTest : public TestT { spv_context spvContext = spvContextCreate(target_env); spv_diagnostic diagnostic = nullptr; spv_const_binary_t binary = {optimized_bin.data(), optimized_bin.size()}; - spv_result_t error = spvValidate(spvContext, &binary, &diagnostic); + spv_result_t error = spvValidateWithOptions( + spvContext, ValidatorOptions(), &binary, &diagnostic); EXPECT_EQ(error, 0); if (error != 0) spvDiagnosticPrint(diagnostic); spvDiagnosticDestroy(diagnostic); @@ -137,7 +138,8 @@ class PassTest : public TestT { spv_context spvContext = spvContextCreate(target_env); spv_diagnostic diagnostic = nullptr; spv_const_binary_t binary = {optimized_bin.data(), optimized_bin.size()}; - spv_result_t error = spvValidate(spvContext, &binary, &diagnostic); + spv_result_t error = spvValidateWithOptions( + spvContext, ValidatorOptions(), &binary, &diagnostic); EXPECT_EQ(error, 0); if (error != 0) spvDiagnosticPrint(diagnostic); spvDiagnosticDestroy(diagnostic); @@ -163,7 +165,6 @@ class PassTest : public TestT { std::forward(args)...); } -#ifdef SPIRV_EFFCEE // Runs a single pass of class |PassT| on the binary assembled from the // |original| assembly, then runs an Effcee matcher over the disassembled // result, using checks parsed from |original|. Always skips OpNop. @@ -181,7 +182,6 @@ class PassTest : public TestT { << match_result.message() << "\nChecking result:\n" << disassembly; } -#endif // Adds a pass to be run. template @@ -231,13 +231,16 @@ class PassTest : public TestT { consumer_ = msg_consumer; } + spv_validator_options ValidatorOptions() { return &validator_options_; } + private: - MessageConsumer consumer_; // Message consumer. - std::unique_ptr context_; // IR context + MessageConsumer consumer_; // Message consumer. + std::unique_ptr context_; // IR context SpirvTools tools_; // An instance for calling SPIRV-Tools functionalities. std::unique_ptr manager_; // The pass manager. uint32_t assemble_options_; uint32_t disassemble_options_; + spv_validator_options_t validator_options_; }; } // namespace opt diff --git a/3rdparty/spirv-tools/test/opt/pass_merge_return_test.cpp b/3rdparty/spirv-tools/test/opt/pass_merge_return_test.cpp index 4dd4b6b28..9c8d80d5c 100644 --- a/3rdparty/spirv-tools/test/opt/pass_merge_return_test.cpp +++ b/3rdparty/spirv-tools/test/opt/pass_merge_return_test.cpp @@ -104,6 +104,7 @@ TEST_F(MergeReturnPassTest, TwoReturnsWithValues) { R"(OpCapability Linkage OpCapability Kernel OpMemoryModel Logical OpenCL +OpDecorate %7 LinkageAttributes "simple_kernel" Export %1 = OpTypeInt 32 0 %2 = OpTypeBool %3 = OpConstantFalse %2 @@ -124,6 +125,7 @@ OpFunctionEnd R"(OpCapability Linkage OpCapability Kernel OpMemoryModel Logical OpenCL +OpDecorate %7 LinkageAttributes "simple_kernel" Export %1 = OpTypeInt 32 0 %2 = OpTypeBool %3 = OpConstantFalse %2 @@ -207,6 +209,7 @@ TEST_F(MergeReturnPassTest, UnreachableReturnsWithValues) { R"(OpCapability Linkage OpCapability Kernel OpMemoryModel Logical OpenCL +OpDecorate %7 LinkageAttributes "simple_kernel" Export %1 = OpTypeInt 32 0 %2 = OpTypeBool %3 = OpConstantFalse %2 @@ -230,6 +233,7 @@ OpFunctionEnd R"(OpCapability Linkage OpCapability Kernel OpMemoryModel Logical OpenCL +OpDecorate %7 LinkageAttributes "simple_kernel" Export %1 = OpTypeInt 32 0 %2 = OpTypeBool %3 = OpConstantFalse %2 @@ -257,7 +261,6 @@ OpFunctionEnd SinglePassRunAndCheck(before, after, false, true); } -#ifdef SPIRV_EFFCEE TEST_F(MergeReturnPassTest, StructuredControlFlowWithUnreachableMerge) { const std::string before = R"( @@ -265,15 +268,19 @@ TEST_F(MergeReturnPassTest, StructuredControlFlowWithUnreachableMerge) { ; CHECK: [[true:%\w+]] = OpConstantTrue ; CHECK: OpFunction ; CHECK: [[var:%\w+]] = OpVariable [[:%\w+]] Function [[false]] +; CHECK: OpLoopMerge [[return_block:%\w+]] ; CHECK: OpSelectionMerge [[merge_lab:%\w+]] ; CHECK: OpBranchConditional [[cond:%\w+]] [[if_lab:%\w+]] [[then_lab:%\w+]] ; CHECK: [[if_lab]] = OpLabel ; CHECK-NEXT: OpStore [[var]] [[true]] -; CHECK-NEXT: OpBranch +; CHECK-NEXT: OpBranch [[return_block]] ; CHECK: [[then_lab]] = OpLabel ; CHECK-NEXT: OpStore [[var]] [[true]] -; CHECK-NEXT: OpBranch [[merge_lab]] -; CHECK: OpReturn +; CHECK-NEXT: OpBranch [[return_block]] +; CHECK: [[merge_lab]] = OpLabel +; CHECK-NEXT: OpBranch [[return_block]] +; CHECK: [[return_block]] = OpLabel +; CHECK-NEXT: OpReturn OpCapability Addresses OpCapability Shader OpCapability Linkage @@ -307,6 +314,7 @@ TEST_F(MergeReturnPassTest, StructuredControlFlowAddPhi) { ; CHECK: [[true:%\w+]] = OpConstantTrue ; CHECK: OpFunction ; CHECK: [[var:%\w+]] = OpVariable [[:%\w+]] Function [[false]] +; CHECK: OpLoopMerge [[dummy_loop_merge:%\w+]] ; CHECK: OpSelectionMerge [[merge_lab:%\w+]] ; CHECK: OpBranchConditional [[cond:%\w+]] [[if_lab:%\w+]] [[then_lab:%\w+]] ; CHECK: [[if_lab]] = OpLabel @@ -314,11 +322,10 @@ TEST_F(MergeReturnPassTest, StructuredControlFlowAddPhi) { ; CHECK-NEXT: OpBranch ; CHECK: [[then_lab]] = OpLabel ; CHECK-NEXT: OpStore [[var]] [[true]] -; CHECK-NEXT: OpBranch [[merge_lab]] +; CHECK-NEXT: OpBranch [[dummy_loop_merge]] ; CHECK: [[merge_lab]] = OpLabel -; CHECK-NEXT: [[phi:%\w+]] = OpPhi [[type]] [[add]] [[if_lab]] [[undef:%\w+]] [[then_lab]] -; CHECK: OpIAdd [[type]] [[phi]] [[phi]] -; CHECK: OpReturn +; CHECK: [[dummy_loop_merge]] = OpLabel +; CHECK-NEXT: OpReturn OpCapability Addresses OpCapability Shader OpCapability Linkage @@ -357,6 +364,7 @@ TEST_F(MergeReturnPassTest, StructuredControlDecoration) { ; CHECK: [[true:%\w+]] = OpConstantTrue ; CHECK: OpFunction ; CHECK: [[var:%\w+]] = OpVariable [[:%\w+]] Function [[false]] +; CHECK: OpLoopMerge [[return_block:%\w+]] ; CHECK: OpSelectionMerge [[merge_lab:%\w+]] ; CHECK: OpBranchConditional [[cond:%\w+]] [[if_lab:%\w+]] [[then_lab:%\w+]] ; CHECK: [[if_lab]] = OpLabel @@ -364,9 +372,12 @@ TEST_F(MergeReturnPassTest, StructuredControlDecoration) { ; CHECK-NEXT: OpBranch ; CHECK: [[then_lab]] = OpLabel ; CHECK-NEXT: OpStore [[var]] [[true]] -; CHECK-NEXT: OpBranch [[merge_lab]] +; CHECK-NEXT: OpBranch [[return_block]] ; CHECK: [[merge_lab]] = OpLabel -; CHECK: OpReturn +; CHECK-NEXT: OpStore [[var]] [[true]] +; CHECK-NEXT: OpBranch [[return_block]] +; CHECK: [[return_block]] = OpLabel +; CHECK-NEXT: OpReturn OpCapability Addresses OpCapability Shader OpCapability Linkage @@ -396,69 +407,18 @@ OpFunctionEnd SinglePassRunAndMatch(before, false); } -TEST_F(MergeReturnPassTest, StructuredControlDecoration2) { - const std::string before = - R"( -; CHECK: OpDecorate [[dec_id:%\w+]] RelaxedPrecision -; CHECK: [[false:%\w+]] = OpConstantFalse -; CHECK: [[true:%\w+]] = OpConstantTrue -; CHECK: OpFunction -; CHECK: [[var:%\w+]] = OpVariable [[:%\w+]] Function [[false]] -; CHECK: OpSelectionMerge [[merge_lab:%\w+]] -; CHECK: OpBranchConditional [[cond:%\w+]] [[if_lab:%\w+]] [[then_lab:%\w+]] -; CHECK: [[if_lab]] = OpLabel -; CHECK-NEXT: [[dec_id]] = OpIAdd [[type:%\w+]] -; CHECK-NEXT: OpBranch -; CHECK: [[then_lab]] = OpLabel -; CHECK-NEXT: OpStore [[var]] [[true]] -; CHECK-NEXT: OpBranch [[merge_lab]] -; CHECK: [[merge_lab]] = OpLabel -; CHECK-NEXT: [[phi:%\w+]] = OpPhi [[type]] [[dec_id]] [[if_lab]] [[undef:%\w+]] [[then_lab]] -; CHECK: OpIAdd [[type]] [[phi]] [[phi]] -; CHECK: OpReturn -OpCapability Addresses -OpCapability Shader -OpCapability Linkage -OpMemoryModel Logical GLSL450 -OpEntryPoint GLCompute %6 "simple_shader" -OpDecorate %11 RelaxedPrecision -%2 = OpTypeVoid -%3 = OpTypeBool -%int = OpTypeInt 32 0 -%int_0 = OpConstant %int 0 -%4 = OpConstantFalse %3 -%1 = OpTypeFunction %2 -%6 = OpFunction %2 None %1 -%7 = OpLabel -OpSelectionMerge %10 None -OpBranchConditional %4 %8 %9 -%8 = OpLabel -%11 = OpIAdd %int %int_0 %int_0 -OpBranch %10 -%9 = OpLabel -OpReturn -%10 = OpLabel -%12 = OpIAdd %int %11 %11 -OpReturn -OpFunctionEnd -)"; - - SinglePassRunAndMatch(before, false); -} - TEST_F(MergeReturnPassTest, SplitBlockUsedInPhi) { const std::string before = R"( ; CHECK: OpFunction -; CHECK-NEXT: OpLabel -; CHECK: OpSelectionMerge [[merge1:%\w+]] None -; CHECK: [[merge1]] = OpLabel -; CHECK: OpBranchConditional %{{\w+}} %{{\w+}} [[old_merge:%\w+]] -; CHECK: [[old_merge]] = OpLabel -; CHECK-NEXT: OpSelectionMerge [[merge2:%\w+]] -; CHECK-NEXT: OpBranchConditional %false [[side_node:%\w+]] [[merge2]] -; CHECK: [[merge2]] = OpLabel -; CHECK-NEXT: OpPhi %bool %false [[old_merge]] %true [[side_node]] +; CHECK: OpLoopMerge [[dummy_loop_merge:%\w+]] +; CHECK: OpLoopMerge [[loop_merge:%\w+]] +; CHECK: [[loop_merge]] = OpLabel +; CHECK: OpBranchConditional {{%\w+}} [[dummy_loop_merge]] [[old_code_path:%\w+]] +; CHECK: [[old_code_path:%\w+]] = OpLabel +; CHECK: OpBranchConditional {{%\w+}} [[side_node:%\w+]] [[phi_block:%\w+]] +; CHECK: [[phi_block]] = OpLabel +; CHECK-NEXT: OpPhi %bool %false [[side_node]] %true [[old_code_path]] OpCapability Addresses OpCapability Shader OpCapability Linkage @@ -471,17 +431,19 @@ TEST_F(MergeReturnPassTest, SplitBlockUsedInPhi) { %6 = OpTypeFunction %void %1 = OpFunction %void None %6 %7 = OpLabel - OpSelectionMerge %8 None - OpBranchConditional %false %9 %8 + OpLoopMerge %merge %cont None + OpBranchConditional %false %9 %merge %9 = OpLabel OpReturn - %8 = OpLabel - OpSelectionMerge %10 None - OpBranchConditional %false %11 %10 - %11 = OpLabel - OpBranch %10 - %10 = OpLabel - %12 = OpPhi %bool %false %8 %true %11 + %cont = OpLabel + OpBranch %7 + %merge = OpLabel + OpSelectionMerge %merge2 None + OpBranchConditional %false %if %merge2 + %if = OpLabel + OpBranch %merge2 + %merge2 = OpLabel + %12 = OpPhi %bool %false %if %true %merge OpReturn OpFunctionEnd )"; @@ -557,39 +519,61 @@ TEST_F(MergeReturnPassTest, UpdateOrderWhenPredicating) { SinglePassRunAndMatch(before, false); } */ -#endif TEST_F(MergeReturnPassTest, StructuredControlFlowBothMergeAndHeader) { - const std::string before = - R"(OpCapability Addresses + const std::string test = + R"( +; CHECK: OpFunction +; CHECK: [[ret_flag:%\w+]] = OpVariable %_ptr_Function_bool Function %false +; CHECK: OpLoopMerge [[dummy_loop_merge:%\w+]] +; CHECK: OpLoopMerge [[loop1_merge:%\w+]] {{%\w+}} +; CHECK-NEXT: OpBranchConditional {{%\w+}} [[if_lab:%\w+]] {{%\w+}} +; CHECK: [[if_lab]] = OpLabel +; CHECK: OpStore [[ret_flag]] %true +; CHECK-NEXT: OpBranch [[loop1_merge]] +; CHECK: [[loop1_merge]] = OpLabel +; CHECK-NEXT: [[ld:%\w+]] = OpLoad %bool [[ret_flag]] +; CHECK-NOT: OpLabel +; CHECK: OpBranchConditional [[ld]] [[dummy_loop_merge]] [[empty_block:%\w+]] +; CHECK: [[empty_block]] = OpLabel +; CHECK-NEXT: OpBranch [[loop2:%\w+]] +; CHECK: [[loop2]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpLoopMerge + OpCapability Addresses OpCapability Shader OpCapability Linkage OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %1 "simple_shader" - %2 = OpTypeVoid - %3 = OpTypeBool - %4 = OpTypeInt 32 0 - %5 = OpConstant %4 0 - %6 = OpConstantFalse %3 - %7 = OpTypeFunction %2 - %1 = OpFunction %2 None %7 + %void = OpTypeVoid + %bool = OpTypeBool + %uint = OpTypeInt 32 0 + %uint_0 = OpConstant %uint 0 + %false = OpConstantFalse %bool + %7 = OpTypeFunction %void + %1 = OpFunction %void None %7 %8 = OpLabel - OpSelectionMerge %9 None - OpBranchConditional %6 %10 %11 - %10 = OpLabel - OpReturn - %11 = OpLabel OpBranch %9 %9 = OpLabel - OpLoopMerge %12 %13 None - OpBranch %13 - %13 = OpLabel - %14 = OpIAdd %4 %5 %5 - OpBranchConditional %6 %9 %12 + OpLoopMerge %10 %11 None + OpBranchConditional %false %12 %13 %12 = OpLabel - %15 = OpIAdd %4 %14 %14 + OpReturn + %13 = OpLabel + OpBranch %10 + %11 = OpLabel + OpBranch %9 + %10 = OpLabel + OpLoopMerge %14 %15 None + OpBranch %15 + %15 = OpLabel + %16 = OpIAdd %uint %uint_0 %uint_0 + OpBranchConditional %false %10 %14 + %14 = OpLabel + %17 = OpIAdd %uint %16 %16 OpReturn OpFunctionEnd + )"; const std::string after = @@ -639,7 +623,7 @@ OpReturn OpFunctionEnd )"; - SinglePassRunAndCheck(before, after, false, true); + SinglePassRunAndMatch(test, false); } // TODO(#1861): Reenable these test when the breaks from selection constructs @@ -927,8 +911,27 @@ OpFunctionEnd */ TEST_F(MergeReturnPassTest, NestedLoopMerge) { - const std::string before = - R"( OpCapability SampledBuffer + const std::string test = + R"( +; CHECK: OpFunction +; CHECK: OpLoopMerge [[dummy_loop_merge:%\w+]] +; CHECK: OpLoopMerge [[outer_loop_merge:%\w+]] +; CHECK: OpLoopMerge [[inner_loop_merge:%\w+]] +; CHECK: OpSelectionMerge +; CHECK-NEXT: OpBranchConditional %true [[early_exit_block:%\w+]] +; CHECK: [[early_exit_block]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpBranch [[inner_loop_merge]] +; CHECK: [[inner_loop_merge]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpBranchConditional {{%\w+}} [[outer_loop_merge]] +; CHECK: [[outer_loop_merge]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpBranchConditional {{%\w+}} [[dummy_loop_merge]] +; CHECK: [[dummy_loop_merge]] = OpLabel +; CHECK-NOT: OpLabel +; CHECK: OpReturn + OpCapability SampledBuffer OpCapability StorageImageExtendedFormats OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" @@ -936,7 +939,6 @@ TEST_F(MergeReturnPassTest, NestedLoopMerge) { OpEntryPoint GLCompute %2 "CS" OpExecutionMode %2 LocalSize 8 8 1 OpSource HLSL 600 - OpName %function "function" %uint = OpTypeInt 32 0 %void = OpTypeVoid %6 = OpTypeFunction %void @@ -946,29 +948,18 @@ TEST_F(MergeReturnPassTest, NestedLoopMerge) { %bool = OpTypeBool %true = OpConstantTrue %bool %_ptr_Function_uint = OpTypePointer Function %uint - %_struct_13 = OpTypeStruct %v3uint %v3uint %v3uint %uint %uint %uint %uint %uint %uint %2 = OpFunction %void None %6 %14 = OpLabel - %15 = OpFunctionCall %void %function - OpReturn - OpFunctionEnd - %function = OpFunction %void None %6 - %16 = OpLabel - %17 = OpVariable %_ptr_Function_uint Function - %18 = OpVariable %_ptr_Function_uint Function - OpStore %17 %uint_0 OpBranch %19 %19 = OpLabel - %20 = OpLoad %uint %17 + %20 = OpPhi %uint %uint_0 %2 %34 %23 %21 = OpULessThan %bool %20 %uint_1 OpLoopMerge %22 %23 DontUnroll OpBranchConditional %21 %24 %22 %24 = OpLabel - OpStore %18 %uint_1 OpBranch %25 %25 = OpLabel - %26 = OpLoad %uint %18 - %27 = OpINotEqual %bool %26 %uint_0 + %27 = OpINotEqual %bool %uint_1 %uint_0 OpLoopMerge %28 %29 DontUnroll OpBranchConditional %27 %30 %28 %30 = OpLabel @@ -977,110 +968,32 @@ TEST_F(MergeReturnPassTest, NestedLoopMerge) { %32 = OpLabel OpReturn %31 = OpLabel - OpStore %18 %uint_1 OpBranch %29 %29 = OpLabel OpBranch %25 %28 = OpLabel OpBranch %23 %23 = OpLabel - %33 = OpLoad %uint %17 - %34 = OpIAdd %uint %33 %uint_1 - OpStore %17 %34 + %34 = OpIAdd %uint %20 %uint_1 OpBranch %19 %22 = OpLabel OpReturn OpFunctionEnd )"; - const std::string after = - R"(OpCapability SampledBuffer -OpCapability StorageImageExtendedFormats -OpCapability Shader -%1 = OpExtInstImport "GLSL.std.450" -OpMemoryModel Logical GLSL450 -OpEntryPoint GLCompute %2 "CS" -OpExecutionMode %2 LocalSize 8 8 1 -OpSource HLSL 600 -OpName %function "function" -%uint = OpTypeInt 32 0 -%void = OpTypeVoid -%6 = OpTypeFunction %void -%uint_0 = OpConstant %uint 0 -%uint_1 = OpConstant %uint 1 -%v3uint = OpTypeVector %uint 3 -%bool = OpTypeBool -%true = OpConstantTrue %bool -%_ptr_Function_uint = OpTypePointer Function %uint -%_struct_13 = OpTypeStruct %v3uint %v3uint %v3uint %uint %uint %uint %uint %uint %uint -%false = OpConstantFalse %bool -%_ptr_Function_bool = OpTypePointer Function %bool -%2 = OpFunction %void None %6 -%14 = OpLabel -%15 = OpFunctionCall %void %function -OpReturn -OpFunctionEnd -%function = OpFunction %void None %6 -%16 = OpLabel -%38 = OpVariable %_ptr_Function_bool Function %false -%17 = OpVariable %_ptr_Function_uint Function -%18 = OpVariable %_ptr_Function_uint Function -OpStore %17 %uint_0 -OpBranch %19 -%19 = OpLabel -%20 = OpLoad %uint %17 -%21 = OpULessThan %bool %20 %uint_1 -OpLoopMerge %22 %23 DontUnroll -OpBranchConditional %21 %24 %22 -%24 = OpLabel -OpStore %18 %uint_1 -OpBranch %25 -%25 = OpLabel -%26 = OpLoad %uint %18 -%27 = OpINotEqual %bool %26 %uint_0 -OpLoopMerge %28 %29 DontUnroll -OpBranchConditional %27 %30 %28 -%30 = OpLabel -OpSelectionMerge %31 None -OpBranchConditional %true %32 %31 -%32 = OpLabel -OpStore %38 %true -OpBranch %28 -%31 = OpLabel -OpStore %18 %uint_1 -OpBranch %29 -%29 = OpLabel -OpBranch %25 -%28 = OpLabel -%40 = OpLoad %bool %38 -OpBranchConditional %40 %22 %39 -%39 = OpLabel -OpBranch %23 -%23 = OpLabel -%33 = OpLoad %uint %17 -%34 = OpIAdd %uint %33 %uint_1 -OpStore %17 %34 -OpBranch %19 -%22 = OpLabel -%43 = OpLoad %bool %38 -OpSelectionMerge %42 None -OpBranchConditional %43 %42 %41 -%41 = OpLabel -OpStore %38 %true -OpBranch %42 -%42 = OpLabel -OpBranch %35 -%35 = OpLabel -OpReturn -OpFunctionEnd -)"; - - SinglePassRunAndCheck(before, after, false, true); + SinglePassRunAndMatch(test, false); } TEST_F(MergeReturnPassTest, ReturnValueDecoration) { - const std::string before = - R"(OpCapability Linkage + const std::string test = + R"( +; CHECK: OpDecorate [[func:%\w+]] RelaxedPrecision +; CHECK: OpDecorate [[ret_val:%\w+]] RelaxedPrecision +; CHECK: [[func]] = OpFunction +; CHECK-NEXT: OpLabel +; CHECK-NOT: OpLabel +; CHECK: [[ret_val]] = OpVariable +OpCapability Linkage OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %11 "simple_shader" @@ -1095,6 +1008,7 @@ OpDecorate %7 RelaxedPrecision %13 = OpTypeFunction %12 %11 = OpFunction %12 None %13 %l1 = OpLabel +%fc = OpFunctionCall %1 %7 OpReturn OpFunctionEnd %7 = OpFunction %1 None %6 @@ -1107,53 +1021,353 @@ OpReturnValue %5 OpFunctionEnd )"; - const std::string after = - R"(OpCapability Linkage + SinglePassRunAndMatch(test, false); +} + +TEST_F(MergeReturnPassTest, + StructuredControlFlowWithNonTrivialUnreachableMerge) { + const std::string before = + R"( +OpCapability Addresses OpCapability Shader +OpCapability Linkage OpMemoryModel Logical GLSL450 -OpEntryPoint GLCompute %11 "simple_shader" -OpDecorate %7 RelaxedPrecision -OpDecorate %17 RelaxedPrecision -OpDecorate %18 RelaxedPrecision -%12 = OpTypeVoid -%1 = OpTypeInt 32 0 -%2 = OpTypeBool -%3 = OpConstantFalse %2 -%4 = OpConstant %1 0 -%5 = OpConstant %1 1 -%6 = OpTypeFunction %1 -%13 = OpTypeFunction %12 -%16 = OpTypePointer Function %1 -%19 = OpTypePointer Function %2 -%21 = OpConstantTrue %2 -%11 = OpFunction %12 None %13 -%14 = OpLabel -OpReturn -OpFunctionEnd -%7 = OpFunction %1 None %6 +OpEntryPoint GLCompute %6 "simple_shader" +%2 = OpTypeVoid +%3 = OpTypeBool +%4 = OpConstantFalse %3 +%1 = OpTypeFunction %2 +%6 = OpFunction %2 None %1 +%7 = OpLabel +OpSelectionMerge %10 None +OpBranchConditional %4 %8 %9 %8 = OpLabel -%20 = OpVariable %19 Function %3 -%17 = OpVariable %16 Function -OpBranchConditional %3 %9 %10 +OpReturn %9 = OpLabel -OpStore %20 %21 -OpStore %17 %4 -OpBranch %15 +OpReturn %10 = OpLabel -OpStore %20 %21 -OpStore %17 %5 -OpBranch %15 -%15 = OpLabel -%18 = OpLoad %1 %17 -OpReturnValue %18 +%11 = OpUndef %3 +OpUnreachable OpFunctionEnd )"; + std::vector messages = { + {SPV_MSG_ERROR, nullptr, 0, 0, + "Module contains unreachable blocks during merge return. Run dead " + "branch elimination before merge return."}}; + SetMessageConsumer(GetTestMessageConsumer(messages)); + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); - SetDisassembleOptions(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER); - SinglePassRunAndCheck(before, after, false, true); + auto result = SinglePassRunToBinary(before, false); + EXPECT_EQ(Pass::Status::Failure, std::get<1>(result)); + EXPECT_TRUE(messages.empty()); } +TEST_F(MergeReturnPassTest, + StructuredControlFlowWithNonTrivialUnreachableContinue) { + const std::string before = + R"( +OpCapability Addresses +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %6 "simple_shader" +%2 = OpTypeVoid +%3 = OpTypeBool +%4 = OpConstantFalse %3 +%1 = OpTypeFunction %2 +%6 = OpFunction %2 None %1 +%7 = OpLabel +OpBranch %header +%header = OpLabel +OpLoopMerge %merge %continue None +OpBranchConditional %4 %8 %merge +%8 = OpLabel +OpReturn +%continue = OpLabel +%11 = OpUndef %3 +OpBranch %header +%merge = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::vector messages = { + {SPV_MSG_ERROR, nullptr, 0, 0, + "Module contains unreachable blocks during merge return. Run dead " + "branch elimination before merge return."}}; + SetMessageConsumer(GetTestMessageConsumer(messages)); + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + auto result = SinglePassRunToBinary(before, false); + EXPECT_EQ(Pass::Status::Failure, std::get<1>(result)); + EXPECT_TRUE(messages.empty()); +} + +TEST_F(MergeReturnPassTest, StructuredControlFlowWithUnreachableBlock) { + const std::string before = + R"( +OpCapability Addresses +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %6 "simple_shader" +%2 = OpTypeVoid +%3 = OpTypeBool +%4 = OpConstantFalse %3 +%1 = OpTypeFunction %2 +%6 = OpFunction %2 None %1 +%7 = OpLabel +OpBranch %header +%header = OpLabel +OpLoopMerge %merge %continue None +OpBranchConditional %4 %8 %merge +%8 = OpLabel +OpReturn +%continue = OpLabel +OpBranch %header +%merge = OpLabel +OpReturn +%unreachable = OpLabel +OpUnreachable +OpFunctionEnd +)"; + + std::vector messages = { + {SPV_MSG_ERROR, nullptr, 0, 0, + "Module contains unreachable blocks during merge return. Run dead " + "branch elimination before merge return."}}; + SetMessageConsumer(GetTestMessageConsumer(messages)); + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + auto result = SinglePassRunToBinary(before, false); + EXPECT_EQ(Pass::Status::Failure, std::get<1>(result)); + EXPECT_TRUE(messages.empty()); +} + +TEST_F(MergeReturnPassTest, StructuredControlFlowDontChangeEntryPhi) { + const std::string before = + R"( +; CHECK: OpFunction %void +; CHECK: OpLabel +; CHECK: OpLabel +; CHECK: [[pre_header:%\w+]] = OpLabel +; CHECK: [[header:%\w+]] = OpLabel +; CHECK-NEXT: OpPhi %bool {{%\w+}} [[pre_header]] [[iv:%\w+]] [[continue:%\w+]] +; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] [[continue]] +; CHECK: [[continue]] = OpLabel +; CHECK-NEXT: [[iv]] = Op +; CHECK: [[merge]] = OpLabel + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %void = OpTypeVoid + %bool = OpTypeBool + %4 = OpTypeFunction %void + %1 = OpFunction %void None %4 + %5 = OpLabel + %6 = OpUndef %bool + OpBranch %7 + %7 = OpLabel + %8 = OpPhi %bool %6 %5 %9 %10 + OpLoopMerge %11 %10 None + OpBranch %12 + %12 = OpLabel + %13 = OpUndef %bool + OpSelectionMerge %10 DontFlatten + OpBranchConditional %13 %10 %14 + %14 = OpLabel + OpReturn + %10 = OpLabel + %9 = OpUndef %bool + OpBranchConditional %13 %7 %11 + %11 = OpLabel + OpReturn + OpFunctionEnd + +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(before, false); +} + +TEST_F(MergeReturnPassTest, StructuredControlFlowPartialReplacePhi) { + const std::string before = + R"( +; CHECK: OpFunction %void +; CHECK: OpLabel +; CHECK: OpLabel +; CHECK: [[pre_header:%\w+]] = OpLabel +; CHECK: [[header:%\w+]] = OpLabel +; CHECK-NEXT: OpPhi +; CHECK-NEXT: OpLoopMerge [[merge:%\w+]] +; CHECK: OpLabel +; CHECK: [[old_ret_block:%\w+]] = OpLabel +; CHECK: [[bb:%\w+]] = OpLabel +; CHECK-NEXT: [[val:%\w+]] = OpUndef %bool +; CHECK: [[merge]] = OpLabel +; CHECK-NEXT: [[phi1:%\w+]] = OpPhi %bool [[val]] [[bb]] {{%\w+}} [[old_ret_block]] +; CHECK: OpBranchConditional {{%\w+}} {{%\w+}} [[bb2:%\w+]] +; CHECK: [[bb2]] = OpLabel +; CHECK: OpBranch [[header2:%\w+]] +; CHECK: [[header2]] = OpLabel +; CHECK-NEXT: [[phi2:%\w+]] = OpPhi %bool [[phi1]] [[continue2:%\w+]] [[phi1]] [[bb2]] +; CHECK-NEXT: OpLoopMerge {{%\w+}} [[continue2]] +; CHECK: [[continue2]] = OpLabel +; CHECK-NEXT: OpBranch [[header2]] + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %void = OpTypeVoid + %bool = OpTypeBool + %4 = OpTypeFunction %void + %1 = OpFunction %void None %4 + %5 = OpLabel + %6 = OpUndef %bool + OpBranch %7 + %7 = OpLabel + %8 = OpPhi %bool %6 %5 %9 %10 + OpLoopMerge %11 %10 None + OpBranch %12 + %12 = OpLabel + %13 = OpUndef %bool + OpSelectionMerge %10 DontFlatten + OpBranchConditional %13 %10 %14 + %14 = OpLabel + OpReturn + %10 = OpLabel + %9 = OpUndef %bool + OpBranchConditional %13 %7 %11 + %11 = OpLabel + %phi = OpPhi %bool %9 %10 %9 %cont + OpLoopMerge %ret %cont None + OpBranch %bb + %bb = OpLabel + OpBranchConditional %13 %ret %cont + %cont = OpLabel + OpBranch %11 + %ret = OpLabel + OpReturn + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(before, false); +} + +TEST_F(MergeReturnPassTest, GeneratePhiInOuterLoop) { + const std::string before = + R"( + ; CHECK: OpLoopMerge + ; CHECK: OpLoopMerge [[merge:%\w+]] [[continue:%\w+]] + ; CHECK: [[continue]] = OpLabel + ; CHECK-NEXT: [[undef:%\w+]] = OpUndef + ; CHECK: [[merge]] = OpLabel + ; CHECK-NEXT: [[phi:%\w+]] = OpPhi %bool [[undef]] [[continue]] {{%\w+}} {{%\w+}} + ; CHECK: OpCopyObject %bool [[phi]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %bool = OpTypeBool + %8 = OpTypeFunction %bool + %false = OpConstantFalse %bool + %4 = OpFunction %void None %3 + %5 = OpLabel + %63 = OpFunctionCall %bool %9 + OpReturn + OpFunctionEnd + %9 = OpFunction %bool None %8 + %10 = OpLabel + OpBranch %31 + %31 = OpLabel + OpLoopMerge %33 %34 None + OpBranch %32 + %32 = OpLabel + OpSelectionMerge %34 None + OpBranchConditional %false %46 %34 + %46 = OpLabel + OpLoopMerge %51 %52 None + OpBranch %53 + %53 = OpLabel + OpBranchConditional %false %50 %51 + %50 = OpLabel + OpReturnValue %false + %52 = OpLabel + OpBranch %46 + %51 = OpLabel + OpBranch %34 + %34 = OpLabel + %64 = OpUndef %bool + OpBranchConditional %false %31 %33 + %33 = OpLabel + OpBranch %28 + %28 = OpLabel + %60 = OpCopyObject %bool %64 + OpBranch %17 + %17 = OpLabel + OpReturnValue %false + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(before, false); +} + +TEST_F(MergeReturnPassTest, InnerLoopMergeIsOuterLoopContinue) { + const std::string before = + R"( + ; CHECK: OpLoopMerge + ; CHECK-NEXT: OpBranch [[bb1:%\w+]] + ; CHECK: [[bb1]] = OpLabel + ; CHECK-NEXT: OpBranch [[outer_loop_header:%\w+]] + ; CHECK: [[outer_loop_header]] = OpLabel + ; CHECK-NEXT: OpLoopMerge [[outer_loop_merge:%\w+]] [[outer_loop_continue:%\w+]] None + ; CHECK: [[outer_loop_continue]] = OpLabel + ; CHECK-NEXT: OpBranch [[outer_loop_header]] + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %void = OpTypeVoid + %4 = OpTypeFunction %void + %bool = OpTypeBool + %6 = OpTypeFunction %bool + %true = OpConstantTrue %bool + %2 = OpFunction %void None %4 + %8 = OpLabel + %9 = OpFunctionCall %bool %10 + OpReturn + OpFunctionEnd + %10 = OpFunction %bool None %6 + %11 = OpLabel + OpBranch %12 + %12 = OpLabel + OpLoopMerge %13 %14 None + OpBranchConditional %true %15 %13 + %15 = OpLabel + OpLoopMerge %14 %16 None + OpBranchConditional %true %17 %14 + %17 = OpLabel + OpReturnValue %true + %16 = OpLabel + OpBranch %15 + %14 = OpLabel + OpBranch %12 + %13 = OpLabel + OpReturnValue %true + OpFunctionEnd +)"; + + SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + SinglePassRunAndMatch(before, false); +} } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/pass_test.cpp b/3rdparty/spirv-tools/test/opt/pass_test.cpp deleted file mode 100644 index bce05b679..000000000 --- a/3rdparty/spirv-tools/test/opt/pass_test.cpp +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include -#include - -#include "gmock/gmock.h" -#include "source/opt/pass.h" -#include "test/opt/assembly_builder.h" -#include "test/opt/pass_fixture.h" -#include "test/opt/pass_utils.h" - -namespace spvtools { -namespace opt { -namespace { - -class DummyPass : public Pass { - public: - const char* name() const override { return "dummy-pass"; } - Status Process() override { return Status::SuccessWithoutChange; } -}; - -using ::testing::UnorderedElementsAre; -using PassClassTest = PassTest<::testing::Test>; - -TEST_F(PassClassTest, BasicVisitFromEntryPoint) { - // Make sure we visit the entry point, and the function it calls. - // Do not visit Dead or Exported. - const std::string text = R"( - OpCapability Shader - OpMemoryModel Logical GLSL450 - OpEntryPoint Fragment %10 "main" - OpName %10 "main" - OpName %Dead "Dead" - OpName %11 "Constant" - OpName %ExportedFunc "ExportedFunc" - OpDecorate %ExportedFunc LinkageAttributes "ExportedFunc" Export - %void = OpTypeVoid - %6 = OpTypeFunction %void - %10 = OpFunction %void None %6 - %14 = OpLabel - %15 = OpFunctionCall %void %11 - %16 = OpFunctionCall %void %11 - OpReturn - OpFunctionEnd - %11 = OpFunction %void None %6 - %18 = OpLabel - OpReturn - OpFunctionEnd - %Dead = OpFunction %void None %6 - %19 = OpLabel - OpReturn - OpFunctionEnd -%ExportedFunc = OpFunction %void None %7 - %20 = OpLabel - %21 = OpFunctionCall %void %11 - OpReturn - OpFunctionEnd -)"; - // clang-format on - - std::unique_ptr localContext = - BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, - SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); - EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" - << text << std::endl; - DummyPass testPass; - std::vector processed; - Pass::ProcessFunction mark_visited = [&processed](Function* fp) { - processed.push_back(fp->result_id()); - return false; - }; - testPass.ProcessEntryPointCallTree(mark_visited, localContext->module()); - EXPECT_THAT(processed, UnorderedElementsAre(10, 11)); -} - -TEST_F(PassClassTest, BasicVisitReachable) { - // Make sure we visit the entry point, exported function, and the function - // they call. Do not visit Dead. - const std::string text = R"( - OpCapability Shader - OpMemoryModel Logical GLSL450 - OpEntryPoint Fragment %10 "main" - OpName %10 "main" - OpName %Dead "Dead" - OpName %11 "Constant" - OpName %12 "ExportedFunc" - OpName %13 "Constant2" - OpDecorate %12 LinkageAttributes "ExportedFunc" Export - %void = OpTypeVoid - %6 = OpTypeFunction %void - %10 = OpFunction %void None %6 - %14 = OpLabel - %15 = OpFunctionCall %void %11 - %16 = OpFunctionCall %void %11 - OpReturn - OpFunctionEnd - %11 = OpFunction %void None %6 - %18 = OpLabel - OpReturn - OpFunctionEnd - %Dead = OpFunction %void None %6 - %19 = OpLabel - OpReturn - OpFunctionEnd - %12 = OpFunction %void None %9 - %20 = OpLabel - %21 = OpFunctionCall %void %13 - OpReturn - OpFunctionEnd - %13 = OpFunction %void None %6 - %22 = OpLabel - OpReturn - OpFunctionEnd -)"; - // clang-format on - - std::unique_ptr localContext = - BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, - SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); - EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" - << text << std::endl; - - DummyPass testPass; - std::vector processed; - Pass::ProcessFunction mark_visited = [&processed](Function* fp) { - processed.push_back(fp->result_id()); - return false; - }; - testPass.ProcessReachableCallTree(mark_visited, localContext.get()); - EXPECT_THAT(processed, UnorderedElementsAre(10, 11, 12, 13)); -} - -TEST_F(PassClassTest, BasicVisitOnlyOnce) { - // Make sure we visit %11 only once, even if it is called from two different - // functions. - const std::string text = R"( - OpCapability Shader - OpMemoryModel Logical GLSL450 - OpEntryPoint Fragment %10 "main" %gl_FragColor - OpName %10 "main" - OpName %Dead "Dead" - OpName %11 "Constant" - OpName %12 "ExportedFunc" - OpDecorate %12 LinkageAttributes "ExportedFunc" Export - %void = OpTypeVoid - %6 = OpTypeFunction %void - %10 = OpFunction %void None %6 - %14 = OpLabel - %15 = OpFunctionCall %void %11 - %16 = OpFunctionCall %void %12 - OpReturn - OpFunctionEnd - %11 = OpFunction %void None %6 - %18 = OpLabel - %19 = OpFunctionCall %void %12 - OpReturn - OpFunctionEnd - %Dead = OpFunction %void None %6 - %20 = OpLabel - OpReturn - OpFunctionEnd - %12 = OpFunction %void None %9 - %21 = OpLabel - OpReturn - OpFunctionEnd -)"; - // clang-format on - - std::unique_ptr localContext = - BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, - SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); - EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" - << text << std::endl; - - DummyPass testPass; - std::vector processed; - Pass::ProcessFunction mark_visited = [&processed](Function* fp) { - processed.push_back(fp->result_id()); - return false; - }; - testPass.ProcessReachableCallTree(mark_visited, localContext.get()); - EXPECT_THAT(processed, UnorderedElementsAre(10, 11, 12)); -} - -TEST_F(PassClassTest, BasicDontVisitExportedVariable) { - // Make sure we only visit functions and not exported variables. - const std::string text = R"( - OpCapability Shader - OpMemoryModel Logical GLSL450 - OpEntryPoint Fragment %10 "main" %gl_FragColor - OpExecutionMode %10 OriginUpperLeft - OpSource GLSL 150 - OpName %10 "main" - OpName %Dead "Dead" - OpName %11 "Constant" - OpName %12 "export_var" - OpDecorate %12 LinkageAttributes "export_var" Export - %void = OpTypeVoid - %6 = OpTypeFunction %void - %float = OpTypeFloat 32 - %float_1 = OpConstant %float 1 - %12 = OpVariable %float Output - %10 = OpFunction %void None %6 - %14 = OpLabel - OpStore %12 %float_1 - OpReturn - OpFunctionEnd -)"; - // clang-format on - - std::unique_ptr localContext = - BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, - SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); - EXPECT_NE(nullptr, localContext) << "Assembling failed for shader:\n" - << text << std::endl; - - DummyPass testPass; - std::vector processed; - Pass::ProcessFunction mark_visited = [&processed](Function* fp) { - processed.push_back(fp->result_id()); - return false; - }; - testPass.ProcessReachableCallTree(mark_visited, localContext.get()); - EXPECT_THAT(processed, UnorderedElementsAre(10)); -} - -} // namespace -} // namespace opt -} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/pass_utils.cpp b/3rdparty/spirv-tools/test/opt/pass_utils.cpp index ceb999610..4709d0fd1 100644 --- a/3rdparty/spirv-tools/test/opt/pass_utils.cpp +++ b/3rdparty/spirv-tools/test/opt/pass_utils.cpp @@ -35,6 +35,26 @@ const char* kDebugOpcodes[] = { } // anonymous namespace +MessageConsumer GetTestMessageConsumer( + std::vector& expected_messages) { + return [&expected_messages](spv_message_level_t level, const char* source, + const spv_position_t& position, + const char* message) { + EXPECT_TRUE(!expected_messages.empty()); + if (expected_messages.empty()) { + return; + } + + EXPECT_EQ(expected_messages[0].level, level); + EXPECT_EQ(expected_messages[0].line_number, position.line); + EXPECT_EQ(expected_messages[0].column_number, position.column); + EXPECT_STREQ(expected_messages[0].source_file, source); + EXPECT_STREQ(expected_messages[0].message, message); + + expected_messages.erase(expected_messages.begin()); + }; +} + bool FindAndReplace(std::string* process_str, const std::string find_str, const std::string replace_str) { if (process_str->empty() || find_str.empty()) { diff --git a/3rdparty/spirv-tools/test/opt/pass_utils.h b/3rdparty/spirv-tools/test/opt/pass_utils.h index 37406842a..8968f8a64 100644 --- a/3rdparty/spirv-tools/test/opt/pass_utils.h +++ b/3rdparty/spirv-tools/test/opt/pass_utils.h @@ -21,9 +21,25 @@ #include #include +#include "gtest/gtest.h" +#include "include/spirv-tools/libspirv.h" +#include "include/spirv-tools/libspirv.hpp" + namespace spvtools { namespace opt { +struct Message { + spv_message_level_t level; + const char* source_file; + uint32_t line_number; + uint32_t column_number; + const char* message; +}; + +// Return a message consumer that can be used to check that the message produced +// are the messages in |expexted_messages|, and in the same order. +MessageConsumer GetTestMessageConsumer(std::vector& expected_messages); + // In-place substring replacement. Finds the |find_str| in the |process_str| // and replaces the found substring with |replace_str|. Returns true if at // least one replacement is done successfully, returns false otherwise. The diff --git a/3rdparty/spirv-tools/test/opt/pch_test_opt.cpp b/3rdparty/spirv-tools/test/opt/pch_test_opt.cpp new file mode 100644 index 000000000..f15812913 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/pch_test_opt.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_test_opt.h" diff --git a/3rdparty/spirv-tools/test/opt/pch_test_opt.h b/3rdparty/spirv-tools/test/opt/pch_test_opt.h new file mode 100644 index 000000000..4e8106fbf --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/pch_test_opt.h @@ -0,0 +1,25 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "gmock/gmock.h" +#include "source/opt/iterator.h" +#include "source/opt/loop_dependence.h" +#include "source/opt/loop_descriptor.h" +#include "source/opt/pass.h" +#include "source/opt/scalar_analysis.h" +#include "source/opt/tree_iterator.h" +#include "test/opt/assembly_builder.h" +#include "test/opt/function_utils.h" +#include "test/opt/pass_fixture.h" +#include "test/opt/pass_utils.h" diff --git a/3rdparty/spirv-tools/test/opt/private_to_local_test.cpp b/3rdparty/spirv-tools/test/opt/private_to_local_test.cpp index d7eb37e51..3ec74fae6 100644 --- a/3rdparty/spirv-tools/test/opt/private_to_local_test.cpp +++ b/3rdparty/spirv-tools/test/opt/private_to_local_test.cpp @@ -29,7 +29,6 @@ using ::testing::HasSubstr; using ::testing::MatchesRegex; using PrivateToLocalTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(PrivateToLocalTest, ChangeToLocal) { // Change the private variable to a local, and change the types accordingly. const std::string text = R"( @@ -309,8 +308,6 @@ TEST_F(PrivateToLocalTest, CreatePointerToAmbiguousStruct2) { SinglePassRunAndMatch(text, false); } -#endif - } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/process_lines_test.cpp b/3rdparty/spirv-tools/test/opt/process_lines_test.cpp new file mode 100644 index 000000000..33ad4be89 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/process_lines_test.cpp @@ -0,0 +1,695 @@ +// Copyright (c) 2017 Valve Corporation +// Copyright (c) 2017 LunarG Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "test/opt/pass_fixture.h" +#include "test/opt/pass_utils.h" + +namespace spvtools { +namespace opt { +namespace { + +using ProcessLinesTest = PassTest<::testing::Test>; + +TEST_F(ProcessLinesTest, SimplePropagation) { + // Texture2D g_tColor[128]; + // + // layout(push_constant) cbuffer PerViewConstantBuffer_t + // { + // uint g_nDataIdx; + // uint g_nDataIdx2; + // bool g_B; + // }; + // + // SamplerState g_sAniso; + // + // struct PS_INPUT + // { + // float2 vTextureCoords : TEXCOORD2; + // }; + // + // struct PS_OUTPUT + // { + // float4 vColor : SV_Target0; + // }; + // + // PS_OUTPUT MainPs(PS_INPUT i) + // { + // PS_OUTPUT ps_output; + // + // uint u; + // if (g_B) + // u = g_nDataIdx; + // else + // u = g_nDataIdx2; + // ps_output.vColor = g_tColor[u].Sample(g_sAniso, i.vTextureCoords.xy); + // return ps_output; + // } + + const std::string predefs = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +%5 = OpString "foo.frag" +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %PS_INPUT "PS_INPUT" +OpMemberName %PS_INPUT 0 "vTextureCoords" +OpName %PS_OUTPUT "PS_OUTPUT" +OpMemberName %PS_OUTPUT 0 "vColor" +OpName %_MainPs_struct_PS_INPUT_vf21_ "@MainPs(struct-PS_INPUT-vf21;" +OpName %i "i" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpMemberName %PerViewConstantBuffer_t 1 "g_nDataIdx2" +OpMemberName %PerViewConstantBuffer_t 2 "g_B" +OpName %_ "" +OpName %u "u" +OpName %ps_output "ps_output" +OpName %g_tColor "g_tColor" +OpName %g_sAniso "g_sAniso" +OpName %i_0 "i" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpName %param "param" +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpMemberDecorate %PerViewConstantBuffer_t 1 Offset 4 +OpMemberDecorate %PerViewConstantBuffer_t 2 Offset 8 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_tColor DescriptorSet 0 +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +)"; + + const std::string before = + R"(%void = OpTypeVoid +%19 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%PS_INPUT = OpTypeStruct %v2float +%_ptr_Function_PS_INPUT = OpTypePointer Function %PS_INPUT +%v4float = OpTypeVector %float 4 +%PS_OUTPUT = OpTypeStruct %v4float +%24 = OpTypeFunction %PS_OUTPUT %_ptr_Function_PS_INPUT +%uint = OpTypeInt 32 0 +%PerViewConstantBuffer_t = OpTypeStruct %uint %uint %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%int = OpTypeInt 32 1 +%int_2 = OpConstant %int 2 +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%bool = OpTypeBool +%uint_0 = OpConstant %uint 0 +%_ptr_Function_uint = OpTypePointer Function %uint +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%_ptr_Function_PS_OUTPUT = OpTypePointer Function %PS_OUTPUT +%36 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint_128 = OpConstant %uint 128 +%_arr_36_uint_128 = OpTypeArray %36 %uint_128 +%_ptr_UniformConstant__arr_36_uint_128 = OpTypePointer UniformConstant %_arr_36_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_36_uint_128 UniformConstant +%_ptr_UniformConstant_36 = OpTypePointer UniformConstant %36 +%41 = OpTypeSampler +%_ptr_UniformConstant_41 = OpTypePointer UniformConstant %41 +%g_sAniso = OpVariable %_ptr_UniformConstant_41 UniformConstant +%43 = OpTypeSampledImage %36 +%_ptr_Function_v2float = OpTypePointer Function %v2float +%_ptr_Function_v4float = OpTypePointer Function %v4float +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%MainPs = OpFunction %void None %19 +%48 = OpLabel +%i_0 = OpVariable %_ptr_Function_PS_INPUT Function +%param = OpVariable %_ptr_Function_PS_INPUT Function +OpLine %5 23 0 +%49 = OpLoad %v2float %i_vTextureCoords +%50 = OpAccessChain %_ptr_Function_v2float %i_0 %int_0 +OpStore %50 %49 +%51 = OpLoad %PS_INPUT %i_0 +OpStore %param %51 +%52 = OpFunctionCall %PS_OUTPUT %_MainPs_struct_PS_INPUT_vf21_ %param +%53 = OpCompositeExtract %v4float %52 0 +OpStore %_entryPointOutput_vColor %53 +OpReturn +OpFunctionEnd +%_MainPs_struct_PS_INPUT_vf21_ = OpFunction %PS_OUTPUT None %24 +%i = OpFunctionParameter %_ptr_Function_PS_INPUT +%54 = OpLabel +%u = OpVariable %_ptr_Function_uint Function +%ps_output = OpVariable %_ptr_Function_PS_OUTPUT Function +OpLine %5 27 0 +%55 = OpAccessChain %_ptr_PushConstant_uint %_ %int_2 +%56 = OpLoad %uint %55 +%57 = OpINotEqual %bool %56 %uint_0 +OpSelectionMerge %58 None +OpBranchConditional %57 %59 %60 +%59 = OpLabel +OpLine %5 28 0 +%61 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%62 = OpLoad %uint %61 +OpStore %u %62 +OpBranch %58 +%60 = OpLabel +OpLine %5 30 0 +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1 +%64 = OpLoad %uint %63 +OpStore %u %64 +OpBranch %58 +%58 = OpLabel +OpLine %5 31 0 +%65 = OpLoad %uint %u +%66 = OpAccessChain %_ptr_UniformConstant_36 %g_tColor %65 +%67 = OpLoad %36 %66 +%68 = OpLoad %41 %g_sAniso +%69 = OpSampledImage %43 %67 %68 +%70 = OpAccessChain %_ptr_Function_v2float %i %int_0 +%71 = OpLoad %v2float %70 +%72 = OpImageSampleImplicitLod %v4float %69 %71 +%73 = OpAccessChain %_ptr_Function_v4float %ps_output %int_0 +OpStore %73 %72 +OpLine %5 32 0 +%74 = OpLoad %PS_OUTPUT %ps_output +OpReturnValue %74 +OpFunctionEnd +)"; + + const std::string after = + R"(OpNoLine +%void = OpTypeVoid +OpNoLine +%19 = OpTypeFunction %void +OpNoLine +%float = OpTypeFloat 32 +OpNoLine +%v2float = OpTypeVector %float 2 +OpNoLine +%PS_INPUT = OpTypeStruct %v2float +OpNoLine +%_ptr_Function_PS_INPUT = OpTypePointer Function %PS_INPUT +OpNoLine +%v4float = OpTypeVector %float 4 +OpNoLine +%PS_OUTPUT = OpTypeStruct %v4float +OpNoLine +%24 = OpTypeFunction %PS_OUTPUT %_ptr_Function_PS_INPUT +OpNoLine +%uint = OpTypeInt 32 0 +OpNoLine +%PerViewConstantBuffer_t = OpTypeStruct %uint %uint %uint +OpNoLine +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +OpNoLine +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +OpNoLine +%int = OpTypeInt 32 1 +OpNoLine +%int_2 = OpConstant %int 2 +OpNoLine +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +OpNoLine +%bool = OpTypeBool +OpNoLine +%uint_0 = OpConstant %uint 0 +OpNoLine +%_ptr_Function_uint = OpTypePointer Function %uint +OpNoLine +%int_0 = OpConstant %int 0 +OpNoLine +%int_1 = OpConstant %int 1 +OpNoLine +%_ptr_Function_PS_OUTPUT = OpTypePointer Function %PS_OUTPUT +OpNoLine +%36 = OpTypeImage %float 2D 0 0 0 1 Unknown +OpNoLine +%uint_128 = OpConstant %uint 128 +OpNoLine +%_arr_36_uint_128 = OpTypeArray %36 %uint_128 +OpNoLine +%_ptr_UniformConstant__arr_36_uint_128 = OpTypePointer UniformConstant %_arr_36_uint_128 +OpNoLine +%g_tColor = OpVariable %_ptr_UniformConstant__arr_36_uint_128 UniformConstant +OpNoLine +%_ptr_UniformConstant_36 = OpTypePointer UniformConstant %36 +OpNoLine +%41 = OpTypeSampler +OpNoLine +%_ptr_UniformConstant_41 = OpTypePointer UniformConstant %41 +OpNoLine +%g_sAniso = OpVariable %_ptr_UniformConstant_41 UniformConstant +OpNoLine +%43 = OpTypeSampledImage %36 +OpNoLine +%_ptr_Function_v2float = OpTypePointer Function %v2float +OpNoLine +%_ptr_Function_v4float = OpTypePointer Function %v4float +OpNoLine +%_ptr_Input_v2float = OpTypePointer Input %v2float +OpNoLine +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +OpNoLine +%_ptr_Output_v4float = OpTypePointer Output %v4float +OpNoLine +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +OpNoLine +%MainPs = OpFunction %void None %19 +OpNoLine +%48 = OpLabel +OpNoLine +%i_0 = OpVariable %_ptr_Function_PS_INPUT Function +OpNoLine +%param = OpVariable %_ptr_Function_PS_INPUT Function +OpLine %5 23 0 +%49 = OpLoad %v2float %i_vTextureCoords +OpLine %5 23 0 +%50 = OpAccessChain %_ptr_Function_v2float %i_0 %int_0 +OpLine %5 23 0 +OpStore %50 %49 +OpLine %5 23 0 +%51 = OpLoad %PS_INPUT %i_0 +OpLine %5 23 0 +OpStore %param %51 +OpLine %5 23 0 +%52 = OpFunctionCall %PS_OUTPUT %_MainPs_struct_PS_INPUT_vf21_ %param +OpLine %5 23 0 +%53 = OpCompositeExtract %v4float %52 0 +OpLine %5 23 0 +OpStore %_entryPointOutput_vColor %53 +OpLine %5 23 0 +OpReturn +OpNoLine +OpFunctionEnd +OpNoLine +%_MainPs_struct_PS_INPUT_vf21_ = OpFunction %PS_OUTPUT None %24 +OpNoLine +%i = OpFunctionParameter %_ptr_Function_PS_INPUT +OpNoLine +%54 = OpLabel +OpNoLine +%u = OpVariable %_ptr_Function_uint Function +OpNoLine +%ps_output = OpVariable %_ptr_Function_PS_OUTPUT Function +OpLine %5 27 0 +%55 = OpAccessChain %_ptr_PushConstant_uint %_ %int_2 +OpLine %5 27 0 +%56 = OpLoad %uint %55 +OpLine %5 27 0 +%57 = OpINotEqual %bool %56 %uint_0 +OpLine %5 27 0 +OpSelectionMerge %58 None +OpBranchConditional %57 %59 %60 +OpNoLine +%59 = OpLabel +OpLine %5 28 0 +%61 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +OpLine %5 28 0 +%62 = OpLoad %uint %61 +OpLine %5 28 0 +OpStore %u %62 +OpLine %5 28 0 +OpBranch %58 +OpNoLine +%60 = OpLabel +OpLine %5 30 0 +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1 +OpLine %5 30 0 +%64 = OpLoad %uint %63 +OpLine %5 30 0 +OpStore %u %64 +OpLine %5 30 0 +OpBranch %58 +OpNoLine +%58 = OpLabel +OpLine %5 31 0 +%65 = OpLoad %uint %u +OpLine %5 31 0 +%66 = OpAccessChain %_ptr_UniformConstant_36 %g_tColor %65 +OpLine %5 31 0 +%67 = OpLoad %36 %66 +OpLine %5 31 0 +%68 = OpLoad %41 %g_sAniso +OpLine %5 31 0 +%69 = OpSampledImage %43 %67 %68 +OpLine %5 31 0 +%70 = OpAccessChain %_ptr_Function_v2float %i %int_0 +OpLine %5 31 0 +%71 = OpLoad %v2float %70 +OpLine %5 31 0 +%72 = OpImageSampleImplicitLod %v4float %69 %71 +OpLine %5 31 0 +%73 = OpAccessChain %_ptr_Function_v4float %ps_output %int_0 +OpLine %5 31 0 +OpStore %73 %72 +OpLine %5 32 0 +%74 = OpLoad %PS_OUTPUT %ps_output +OpLine %5 32 0 +OpReturnValue %74 +OpNoLine +OpFunctionEnd +)"; + + SinglePassRunAndCheck(predefs + before, predefs + after, + false, true, kLinesPropagateLines); +} + +TEST_F(ProcessLinesTest, SimpleElimination) { + // Previous test with before and after reversed + + const std::string predefs = + R"(OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %MainPs "MainPs" %i_vTextureCoords %_entryPointOutput_vColor +OpExecutionMode %MainPs OriginUpperLeft +%5 = OpString "foo.frag" +OpSource HLSL 500 +OpName %MainPs "MainPs" +OpName %PS_INPUT "PS_INPUT" +OpMemberName %PS_INPUT 0 "vTextureCoords" +OpName %PS_OUTPUT "PS_OUTPUT" +OpMemberName %PS_OUTPUT 0 "vColor" +OpName %_MainPs_struct_PS_INPUT_vf21_ "@MainPs(struct-PS_INPUT-vf21;" +OpName %i "i" +OpName %PerViewConstantBuffer_t "PerViewConstantBuffer_t" +OpMemberName %PerViewConstantBuffer_t 0 "g_nDataIdx" +OpMemberName %PerViewConstantBuffer_t 1 "g_nDataIdx2" +OpMemberName %PerViewConstantBuffer_t 2 "g_B" +OpName %_ "" +OpName %u "u" +OpName %ps_output "ps_output" +OpName %g_tColor "g_tColor" +OpName %g_sAniso "g_sAniso" +OpName %i_0 "i" +OpName %i_vTextureCoords "i.vTextureCoords" +OpName %_entryPointOutput_vColor "@entryPointOutput.vColor" +OpName %param "param" +OpMemberDecorate %PerViewConstantBuffer_t 0 Offset 0 +OpMemberDecorate %PerViewConstantBuffer_t 1 Offset 4 +OpMemberDecorate %PerViewConstantBuffer_t 2 Offset 8 +OpDecorate %PerViewConstantBuffer_t Block +OpDecorate %g_tColor DescriptorSet 0 +OpDecorate %g_sAniso DescriptorSet 0 +OpDecorate %i_vTextureCoords Location 0 +OpDecorate %_entryPointOutput_vColor Location 0 +)"; + + const std::string before = + R"(OpNoLine +%void = OpTypeVoid +OpNoLine +%19 = OpTypeFunction %void +OpNoLine +%float = OpTypeFloat 32 +OpNoLine +%v2float = OpTypeVector %float 2 +OpNoLine +%PS_INPUT = OpTypeStruct %v2float +OpNoLine +%_ptr_Function_PS_INPUT = OpTypePointer Function %PS_INPUT +OpNoLine +%v4float = OpTypeVector %float 4 +OpNoLine +%PS_OUTPUT = OpTypeStruct %v4float +OpNoLine +%24 = OpTypeFunction %PS_OUTPUT %_ptr_Function_PS_INPUT +OpNoLine +%uint = OpTypeInt 32 0 +OpNoLine +%PerViewConstantBuffer_t = OpTypeStruct %uint %uint %uint +OpNoLine +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +OpNoLine +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +OpNoLine +%int = OpTypeInt 32 1 +OpNoLine +%int_2 = OpConstant %int 2 +OpNoLine +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +OpNoLine +%bool = OpTypeBool +OpNoLine +%uint_0 = OpConstant %uint 0 +OpNoLine +%_ptr_Function_uint = OpTypePointer Function %uint +OpNoLine +%int_0 = OpConstant %int 0 +OpNoLine +%int_1 = OpConstant %int 1 +OpNoLine +%_ptr_Function_PS_OUTPUT = OpTypePointer Function %PS_OUTPUT +OpNoLine +%36 = OpTypeImage %float 2D 0 0 0 1 Unknown +OpNoLine +%uint_128 = OpConstant %uint 128 +OpNoLine +%_arr_36_uint_128 = OpTypeArray %36 %uint_128 +OpNoLine +%_ptr_UniformConstant__arr_36_uint_128 = OpTypePointer UniformConstant %_arr_36_uint_128 +OpNoLine +%g_tColor = OpVariable %_ptr_UniformConstant__arr_36_uint_128 UniformConstant +OpNoLine +%_ptr_UniformConstant_36 = OpTypePointer UniformConstant %36 +OpNoLine +%41 = OpTypeSampler +OpNoLine +%_ptr_UniformConstant_41 = OpTypePointer UniformConstant %41 +OpNoLine +%g_sAniso = OpVariable %_ptr_UniformConstant_41 UniformConstant +OpNoLine +%43 = OpTypeSampledImage %36 +OpNoLine +%_ptr_Function_v2float = OpTypePointer Function %v2float +OpNoLine +%_ptr_Function_v4float = OpTypePointer Function %v4float +OpNoLine +%_ptr_Input_v2float = OpTypePointer Input %v2float +OpNoLine +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +OpNoLine +%_ptr_Output_v4float = OpTypePointer Output %v4float +OpNoLine +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +OpNoLine +%MainPs = OpFunction %void None %19 +OpNoLine +%48 = OpLabel +OpNoLine +%i_0 = OpVariable %_ptr_Function_PS_INPUT Function +OpNoLine +%param = OpVariable %_ptr_Function_PS_INPUT Function +OpLine %5 23 0 +%49 = OpLoad %v2float %i_vTextureCoords +OpLine %5 23 0 +%50 = OpAccessChain %_ptr_Function_v2float %i_0 %int_0 +OpLine %5 23 0 +OpStore %50 %49 +OpLine %5 23 0 +%51 = OpLoad %PS_INPUT %i_0 +OpLine %5 23 0 +OpStore %param %51 +OpLine %5 23 0 +%52 = OpFunctionCall %PS_OUTPUT %_MainPs_struct_PS_INPUT_vf21_ %param +OpLine %5 23 0 +%53 = OpCompositeExtract %v4float %52 0 +OpLine %5 23 0 +OpStore %_entryPointOutput_vColor %53 +OpLine %5 23 0 +OpReturn +OpNoLine +OpFunctionEnd +OpNoLine +%_MainPs_struct_PS_INPUT_vf21_ = OpFunction %PS_OUTPUT None %24 +OpNoLine +%i = OpFunctionParameter %_ptr_Function_PS_INPUT +OpNoLine +%54 = OpLabel +OpNoLine +%u = OpVariable %_ptr_Function_uint Function +OpNoLine +%ps_output = OpVariable %_ptr_Function_PS_OUTPUT Function +OpLine %5 27 0 +%55 = OpAccessChain %_ptr_PushConstant_uint %_ %int_2 +OpLine %5 27 0 +%56 = OpLoad %uint %55 +OpLine %5 27 0 +%57 = OpINotEqual %bool %56 %uint_0 +OpLine %5 27 0 +OpSelectionMerge %58 None +OpBranchConditional %57 %59 %60 +OpNoLine +%59 = OpLabel +OpLine %5 28 0 +%61 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +OpLine %5 28 0 +%62 = OpLoad %uint %61 +OpLine %5 28 0 +OpStore %u %62 +OpLine %5 28 0 +OpBranch %58 +OpNoLine +%60 = OpLabel +OpLine %5 30 0 +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1 +OpLine %5 30 0 +%64 = OpLoad %uint %63 +OpLine %5 30 0 +OpStore %u %64 +OpLine %5 30 0 +OpBranch %58 +OpNoLine +%58 = OpLabel +OpLine %5 31 0 +%65 = OpLoad %uint %u +OpLine %5 31 0 +%66 = OpAccessChain %_ptr_UniformConstant_36 %g_tColor %65 +OpLine %5 31 0 +%67 = OpLoad %36 %66 +OpLine %5 31 0 +%68 = OpLoad %41 %g_sAniso +OpLine %5 31 0 +%69 = OpSampledImage %43 %67 %68 +OpLine %5 31 0 +%70 = OpAccessChain %_ptr_Function_v2float %i %int_0 +OpLine %5 31 0 +%71 = OpLoad %v2float %70 +OpLine %5 31 0 +%72 = OpImageSampleImplicitLod %v4float %69 %71 +OpLine %5 31 0 +%73 = OpAccessChain %_ptr_Function_v4float %ps_output %int_0 +OpLine %5 31 0 +OpStore %73 %72 +OpLine %5 32 0 +%74 = OpLoad %PS_OUTPUT %ps_output +OpLine %5 32 0 +OpReturnValue %74 +OpNoLine +OpFunctionEnd +)"; + + const std::string after = + R"(%void = OpTypeVoid +%19 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v2float = OpTypeVector %float 2 +%PS_INPUT = OpTypeStruct %v2float +%_ptr_Function_PS_INPUT = OpTypePointer Function %PS_INPUT +%v4float = OpTypeVector %float 4 +%PS_OUTPUT = OpTypeStruct %v4float +%24 = OpTypeFunction %PS_OUTPUT %_ptr_Function_PS_INPUT +%uint = OpTypeInt 32 0 +%PerViewConstantBuffer_t = OpTypeStruct %uint %uint %uint +%_ptr_PushConstant_PerViewConstantBuffer_t = OpTypePointer PushConstant %PerViewConstantBuffer_t +%_ = OpVariable %_ptr_PushConstant_PerViewConstantBuffer_t PushConstant +%int = OpTypeInt 32 1 +%int_2 = OpConstant %int 2 +%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint +%bool = OpTypeBool +%uint_0 = OpConstant %uint 0 +%_ptr_Function_uint = OpTypePointer Function %uint +%int_0 = OpConstant %int 0 +%int_1 = OpConstant %int 1 +%_ptr_Function_PS_OUTPUT = OpTypePointer Function %PS_OUTPUT +%36 = OpTypeImage %float 2D 0 0 0 1 Unknown +%uint_128 = OpConstant %uint 128 +%_arr_36_uint_128 = OpTypeArray %36 %uint_128 +%_ptr_UniformConstant__arr_36_uint_128 = OpTypePointer UniformConstant %_arr_36_uint_128 +%g_tColor = OpVariable %_ptr_UniformConstant__arr_36_uint_128 UniformConstant +%_ptr_UniformConstant_36 = OpTypePointer UniformConstant %36 +%41 = OpTypeSampler +%_ptr_UniformConstant_41 = OpTypePointer UniformConstant %41 +%g_sAniso = OpVariable %_ptr_UniformConstant_41 UniformConstant +%43 = OpTypeSampledImage %36 +%_ptr_Function_v2float = OpTypePointer Function %v2float +%_ptr_Function_v4float = OpTypePointer Function %v4float +%_ptr_Input_v2float = OpTypePointer Input %v2float +%i_vTextureCoords = OpVariable %_ptr_Input_v2float Input +%_ptr_Output_v4float = OpTypePointer Output %v4float +%_entryPointOutput_vColor = OpVariable %_ptr_Output_v4float Output +%MainPs = OpFunction %void None %19 +%48 = OpLabel +%i_0 = OpVariable %_ptr_Function_PS_INPUT Function +%param = OpVariable %_ptr_Function_PS_INPUT Function +OpLine %5 23 0 +%49 = OpLoad %v2float %i_vTextureCoords +%50 = OpAccessChain %_ptr_Function_v2float %i_0 %int_0 +OpStore %50 %49 +%51 = OpLoad %PS_INPUT %i_0 +OpStore %param %51 +%52 = OpFunctionCall %PS_OUTPUT %_MainPs_struct_PS_INPUT_vf21_ %param +%53 = OpCompositeExtract %v4float %52 0 +OpStore %_entryPointOutput_vColor %53 +OpReturn +OpFunctionEnd +%_MainPs_struct_PS_INPUT_vf21_ = OpFunction %PS_OUTPUT None %24 +%i = OpFunctionParameter %_ptr_Function_PS_INPUT +%54 = OpLabel +%u = OpVariable %_ptr_Function_uint Function +%ps_output = OpVariable %_ptr_Function_PS_OUTPUT Function +OpLine %5 27 0 +%55 = OpAccessChain %_ptr_PushConstant_uint %_ %int_2 +%56 = OpLoad %uint %55 +%57 = OpINotEqual %bool %56 %uint_0 +OpSelectionMerge %58 None +OpBranchConditional %57 %59 %60 +%59 = OpLabel +OpLine %5 28 0 +%61 = OpAccessChain %_ptr_PushConstant_uint %_ %int_0 +%62 = OpLoad %uint %61 +OpStore %u %62 +OpBranch %58 +%60 = OpLabel +OpLine %5 30 0 +%63 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1 +%64 = OpLoad %uint %63 +OpStore %u %64 +OpBranch %58 +%58 = OpLabel +OpLine %5 31 0 +%65 = OpLoad %uint %u +%66 = OpAccessChain %_ptr_UniformConstant_36 %g_tColor %65 +%67 = OpLoad %36 %66 +%68 = OpLoad %41 %g_sAniso +%69 = OpSampledImage %43 %67 %68 +%70 = OpAccessChain %_ptr_Function_v2float %i %int_0 +%71 = OpLoad %v2float %70 +%72 = OpImageSampleImplicitLod %v4float %69 %71 +%73 = OpAccessChain %_ptr_Function_v4float %ps_output %int_0 +OpStore %73 %72 +OpLine %5 32 0 +%74 = OpLoad %PS_OUTPUT %ps_output +OpReturnValue %74 +OpFunctionEnd +)"; + + SinglePassRunAndCheck( + predefs + before, predefs + after, false, true, kLinesEliminateDeadLines); +} + +// TODO(greg-lunarg): Add tests to verify handling of these cases: +// +// TODO(greg-lunarg): Think about other tests :) + +} // namespace +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/reduce_load_size_test.cpp b/3rdparty/spirv-tools/test/opt/reduce_load_size_test.cpp index 1d367e101..7b850e317 100644 --- a/3rdparty/spirv-tools/test/opt/reduce_load_size_test.cpp +++ b/3rdparty/spirv-tools/test/opt/reduce_load_size_test.cpp @@ -23,7 +23,6 @@ namespace { using ReduceLoadSizeTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(ReduceLoadSizeTest, cbuffer_load_extract) { // Originally from the following HLSL: // struct S { @@ -107,7 +106,6 @@ TEST_F(ReduceLoadSizeTest, cbuffer_load_extract) { SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES); SinglePassRunAndMatch(test, false); } -#endif TEST_F(ReduceLoadSizeTest, cbuffer_load_extract_vector) { // Originally from the following HLSL: @@ -323,6 +321,34 @@ OpFunctionEnd SinglePassRunAndCheck(test, test, true, false); } +TEST_F(ReduceLoadSizeTest, extract_with_no_index) { + const std::string test = + R"( + OpCapability ImageGatherExtended + OpExtension "" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "P�Ma'" %12 %17 + OpExecutionMode %4 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %_struct_7 = OpTypeStruct %float %float +%_ptr_Input__struct_7 = OpTypePointer Input %_struct_7 +%_ptr_Output__struct_7 = OpTypePointer Output %_struct_7 + %12 = OpVariable %_ptr_Input__struct_7 Input + %17 = OpVariable %_ptr_Output__struct_7 Output + %4 = OpFunction %void DontInline|Pure|Const %3 + %245 = OpLabel + %13 = OpLoad %_struct_7 %12 + %33 = OpCompositeExtract %_struct_7 %13 + OpReturn + OpFunctionEnd + )"; + + auto result = SinglePassRunAndDisassemble(test, true, true); + EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/redundancy_elimination_test.cpp b/3rdparty/spirv-tools/test/opt/redundancy_elimination_test.cpp index a6e8c4f28..7d2abe846 100644 --- a/3rdparty/spirv-tools/test/opt/redundancy_elimination_test.cpp +++ b/3rdparty/spirv-tools/test/opt/redundancy_elimination_test.cpp @@ -29,7 +29,6 @@ using ::testing::HasSubstr; using ::testing::MatchesRegex; using RedundancyEliminationTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE // Test that it can get a simple case of local redundancy elimination. // The rest of the test check for extra functionality. TEST_F(RedundancyEliminationTest, RemoveRedundantLocalAdd) { @@ -273,8 +272,6 @@ TEST_F(RedundancyEliminationTest, KeepRedundantAddWithoutPhi) { EXPECT_EQ(Pass::Status::SuccessWithoutChange, std::get<1>(result)); } -#endif - } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/replace_invalid_opc_test.cpp b/3rdparty/spirv-tools/test/opt/replace_invalid_opc_test.cpp index adfe2ee1e..1be904b4e 100644 --- a/3rdparty/spirv-tools/test/opt/replace_invalid_opc_test.cpp +++ b/3rdparty/spirv-tools/test/opt/replace_invalid_opc_test.cpp @@ -17,6 +17,7 @@ #include #include "gmock/gmock.h" +#include "pass_utils.h" #include "test/opt/assembly_builder.h" #include "test/opt/pass_fixture.h" @@ -26,7 +27,6 @@ namespace { using ReplaceInvalidOpcodeTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(ReplaceInvalidOpcodeTest, ReplaceInstruction) { const std::string text = R"( ; CHECK: [[special_const:%\w+]] = OpConstant %float -6.2598534e+18 @@ -435,34 +435,6 @@ TEST_F(ReplaceInvalidOpcodeTest, BarrierReplace) { SinglePassRunAndMatch(text, false); } -struct Message { - spv_message_level_t level; - const char* source_file; - uint32_t line_number; - uint32_t column_number; - const char* message; -}; - -MessageConsumer GetTestMessageConsumer( - std::vector& expected_messages) { - return [&expected_messages](spv_message_level_t level, const char* source, - const spv_position_t& position, - const char* message) { - EXPECT_TRUE(!expected_messages.empty()); - if (expected_messages.empty()) { - return; - } - - EXPECT_EQ(expected_messages[0].level, level); - EXPECT_EQ(expected_messages[0].line_number, position.line); - EXPECT_EQ(expected_messages[0].column_number, position.column); - EXPECT_STREQ(expected_messages[0].source_file, source); - EXPECT_STREQ(expected_messages[0].message, message); - - expected_messages.erase(expected_messages.begin()); - }; -} - TEST_F(ReplaceInvalidOpcodeTest, MessageTest) { const std::string text = R"( OpCapability Shader @@ -589,8 +561,6 @@ TEST_F(ReplaceInvalidOpcodeTest, MultipleMessageTest) { EXPECT_EQ(Pass::Status::SuccessWithChange, std::get<1>(result)); } -#endif - } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/scalar_replacement_test.cpp b/3rdparty/spirv-tools/test/opt/scalar_replacement_test.cpp index 652978bb0..67c97a595 100644 --- a/3rdparty/spirv-tools/test/opt/scalar_replacement_test.cpp +++ b/3rdparty/spirv-tools/test/opt/scalar_replacement_test.cpp @@ -25,8 +25,6 @@ namespace { using ScalarReplacementTest = PassTest<::testing::Test>; -// TODO(dneto): Add Effcee as required dependency, and make this unconditional. -#ifdef SPIRV_EFFCEE TEST_F(ScalarReplacementTest, SimpleStruct) { const std::string text = R"( ; @@ -1151,7 +1149,6 @@ TEST_F(ScalarReplacementTest, NoPartialAccesses2) { ; CHECK: OpVariable [[float_ptr]] Function ; CHECK: OpVariable [[float_ptr]] Function ; CHECK: OpVariable [[float_ptr]] Function -; CHECK: OpVariable [[float_ptr]] Function ; CHECK-NOT: OpVariable ; OpCapability Shader @@ -1404,6 +1401,42 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } +TEST_F(ScalarReplacementTest, SpecConstantArray) { + const std::string text = R"( +; CHECK: [[int:%\w+]] = OpTypeInt +; CHECK: [[spec_const:%\w+]] = OpSpecConstant [[int]] 4 +; CHECK: [[spec_op:%\w+]] = OpSpecConstantOp [[int]] IAdd [[spec_const]] [[spec_const]] +; CHECK: [[array1:%\w+]] = OpTypeArray [[int]] [[spec_const]] +; CHECK: [[array2:%\w+]] = OpTypeArray [[int]] [[spec_op]] +; CHECK: [[ptr_array1:%\w+]] = OpTypePointer Function [[array1]] +; CHECK: [[ptr_array2:%\w+]] = OpTypePointer Function [[array2]] +; CHECK: OpLabel +; CHECK-NEXT: OpVariable [[ptr_array1]] Function +; CHECK-NEXT: OpVariable [[ptr_array2]] Function +; CHECK-NOT: OpVariable +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%void_fn = OpTypeFunction %void +%int = OpTypeInt 32 0 +%spec_const = OpSpecConstant %int 4 +%spec_op = OpSpecConstantOp %int IAdd %spec_const %spec_const +%array_1 = OpTypeArray %int %spec_const +%array_2 = OpTypeArray %int %spec_op +%ptr_array_1_Function = OpTypePointer Function %array_1 +%ptr_array_2_Function = OpTypePointer Function %array_2 +%func = OpFunction %void None %void_fn +%1 = OpLabel +%var_1 = OpVariable %ptr_array_1_Function Function +%var_2 = OpVariable %ptr_array_2_Function Function +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + TEST_F(ScalarReplacementTest, CreateAmbiguousNullConstant2) { const std::string text = R"( ; @@ -1448,7 +1481,6 @@ OpFunctionEnd SinglePassRunAndMatch(text, true); } -#endif // SPIRV_EFFCEE // Test that a struct of size 4 is not replaced when there is a limit of 2. TEST_F(ScalarReplacementTest, TestLimit) { @@ -1522,6 +1554,45 @@ OpFunctionEnd EXPECT_EQ(Pass::Status::SuccessWithChange, std::get<1>(result)); } +TEST_F(ScalarReplacementTest, AmbigousPointer) { + const std::string text = R"( +; CHECK: [[s1:%\w+]] = OpTypeStruct %uint +; CHECK: [[s2:%\w+]] = OpTypeStruct %uint +; CHECK: [[s3:%\w+]] = OpTypeStruct [[s2]] +; CHECK: [[s3_const:%\w+]] = OpConstantComposite [[s3]] +; CHECK: [[s2_ptr:%\w+]] = OpTypePointer Function [[s2]] +; CHECK: OpCompositeExtract [[s2]] [[s3_const]] + + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %void = OpTypeVoid + %5 = OpTypeFunction %void + %uint = OpTypeInt 32 0 + %_struct_7 = OpTypeStruct %uint + %_struct_8 = OpTypeStruct %uint + %_struct_9 = OpTypeStruct %_struct_8 + %uint_1 = OpConstant %uint 1 + %11 = OpConstantComposite %_struct_8 %uint_1 + %12 = OpConstantComposite %_struct_9 %11 +%_ptr_Function__struct_9 = OpTypePointer Function %_struct_9 +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %2 = OpFunction %void None %5 + %15 = OpLabel + %var = OpVariable %_ptr_Function__struct_9 Function + OpStore %var %12 + %ld = OpLoad %_struct_9 %var + %ex = OpCompositeExtract %_struct_8 %ld 0 + OpReturn + OpFunctionEnd + )"; + + SinglePassRunAndMatch(text, true); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/simplification_test.cpp b/3rdparty/spirv-tools/test/opt/simplification_test.cpp index b5ad26790..b7d6f18c6 100644 --- a/3rdparty/spirv-tools/test/opt/simplification_test.cpp +++ b/3rdparty/spirv-tools/test/opt/simplification_test.cpp @@ -25,7 +25,6 @@ namespace { using SimplificationTest = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(SimplificationTest, StraightLineTest) { // Testing that folding rules are combined in simple straight line code. const std::string text = R"(OpCapability Shader @@ -203,8 +202,6 @@ TEST_F(SimplificationTest, ThroughLoops) { SinglePassRunAndMatch(text, false); } -#endif - } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/strength_reduction_test.cpp b/3rdparty/spirv-tools/test/opt/strength_reduction_test.cpp index 654c90df9..31d050360 100644 --- a/3rdparty/spirv-tools/test/opt/strength_reduction_test.cpp +++ b/3rdparty/spirv-tools/test/opt/strength_reduction_test.cpp @@ -65,7 +65,6 @@ TEST_F(StrengthReductionBasicTest, BasicReplaceMulBy8) { } // TODO(dneto): Add Effcee as required dependency, and make this unconditional. -#ifdef SPIRV_EFFCEE // Test to make sure we replace 16*5 // Also demonstrate use of Effcee matching. TEST_F(StrengthReductionBasicTest, BasicReplaceMulBy16) { @@ -102,7 +101,6 @@ TEST_F(StrengthReductionBasicTest, BasicReplaceMulBy16) { SinglePassRunAndMatch(text, false); } -#endif // Test to make sure we replace a multiple of 32 and 4. TEST_F(StrengthReductionBasicTest, BasicTwoPowersOf2) { diff --git a/3rdparty/spirv-tools/test/opt/strip_reflect_info_test.cpp b/3rdparty/spirv-tools/test/opt/strip_reflect_info_test.cpp index 088cac7aa..a9cfd4763 100644 --- a/3rdparty/spirv-tools/test/opt/strip_reflect_info_test.cpp +++ b/3rdparty/spirv-tools/test/opt/strip_reflect_info_test.cpp @@ -64,6 +64,27 @@ OpMemoryModel Logical Simple SinglePassRunAndCheck(before, after, false); } +TEST_F(StripLineReflectInfoTest, StripHlslSemanticOnMember) { + // This is a non-sensical example, but exercises the instructions. + std::string before = R"(OpCapability Shader +OpCapability Linkage +OpExtension "SPV_GOOGLE_decorate_string" +OpExtension "SPV_GOOGLE_hlsl_functionality1" +OpMemoryModel Logical Simple +OpMemberDecorateStringGOOGLE %struct 0 HlslSemanticGOOGLE "foobar" +%float = OpTypeFloat 32 +%_struct_3 = OpTypeStruct %float +)"; + std::string after = R"(OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical Simple +%float = OpTypeFloat 32 +%_struct_3 = OpTypeStruct %float +)"; + + SinglePassRunAndCheck(before, after, false); +} + } // namespace } // namespace opt } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/struct_cfg_analysis_test.cpp b/3rdparty/spirv-tools/test/opt/struct_cfg_analysis_test.cpp new file mode 100644 index 000000000..13f9022d0 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/struct_cfg_analysis_test.cpp @@ -0,0 +1,466 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "gmock/gmock.h" +#include "source/opt/struct_cfg_analysis.h" +#include "test/opt/assembly_builder.h" +#include "test/opt/pass_fixture.h" +#include "test/opt/pass_utils.h" + +namespace spvtools { +namespace opt { +namespace { + +using StructCFGAnalysisTest = PassTest<::testing::Test>; + +TEST_F(StructCFGAnalysisTest, BBInSelection) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%uint = OpTypeInt 32 0 +%uint_undef = OpUndef %uint +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%1 = OpLabel +OpSelectionMerge %3 None +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpBranch %3 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // The header is not in the construct. + EXPECT_EQ(analysis.ContainingConstruct(1), 0); + EXPECT_EQ(analysis.ContainingLoop(1), 0); + EXPECT_EQ(analysis.MergeBlock(1), 0); + EXPECT_EQ(analysis.LoopMergeBlock(1), 0); + + // BB2 is in the construct. + EXPECT_EQ(analysis.ContainingConstruct(2), 1); + EXPECT_EQ(analysis.ContainingLoop(2), 0); + EXPECT_EQ(analysis.MergeBlock(2), 3); + EXPECT_EQ(analysis.LoopMergeBlock(2), 0); + + // The merge node is not in the construct. + EXPECT_EQ(analysis.ContainingConstruct(3), 0); + EXPECT_EQ(analysis.ContainingLoop(3), 0); + EXPECT_EQ(analysis.MergeBlock(3), 0); + EXPECT_EQ(analysis.LoopMergeBlock(3), 0); +} + +TEST_F(StructCFGAnalysisTest, BBInLoop) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%uint = OpTypeInt 32 0 +%uint_undef = OpUndef %uint +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%entry_lab = OpLabel +OpBranch %1 +%1 = OpLabel +OpLoopMerge %3 %4 None +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpBranch %3 +%4 = OpLabel +OpBranch %1 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // The header is not in the construct. + EXPECT_EQ(analysis.ContainingConstruct(1), 0); + EXPECT_EQ(analysis.ContainingLoop(1), 0); + EXPECT_EQ(analysis.MergeBlock(1), 0); + EXPECT_EQ(analysis.LoopMergeBlock(1), 0); + + // BB2 is in the construct. + EXPECT_EQ(analysis.ContainingConstruct(2), 1); + EXPECT_EQ(analysis.ContainingLoop(2), 1); + EXPECT_EQ(analysis.MergeBlock(2), 3); + EXPECT_EQ(analysis.LoopMergeBlock(2), 3); + + // The merge node is not in the construct. + EXPECT_EQ(analysis.ContainingConstruct(3), 0); + EXPECT_EQ(analysis.ContainingLoop(3), 0); + EXPECT_EQ(analysis.MergeBlock(3), 0); + EXPECT_EQ(analysis.LoopMergeBlock(3), 0); + + // The continue block is in the construct. + EXPECT_EQ(analysis.ContainingConstruct(4), 1); + EXPECT_EQ(analysis.ContainingLoop(4), 1); + EXPECT_EQ(analysis.MergeBlock(4), 3); + EXPECT_EQ(analysis.LoopMergeBlock(4), 3); +} + +TEST_F(StructCFGAnalysisTest, SelectionInLoop) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%uint = OpTypeInt 32 0 +%uint_undef = OpUndef %uint +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%entry_lab = OpLabel +OpBranch %1 +%1 = OpLabel +OpLoopMerge %3 %4 None +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpSelectionMerge %6 None +OpBranchConditional %undef_bool %5 %6 +%5 = OpLabel +OpBranch %6 +%6 = OpLabel +OpBranch %3 +%4 = OpLabel +OpBranch %1 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // The loop header is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(1), 0); + EXPECT_EQ(analysis.ContainingLoop(1), 0); + EXPECT_EQ(analysis.MergeBlock(1), 0); + EXPECT_EQ(analysis.LoopMergeBlock(1), 0); + + // Selection header is in the loop only. + EXPECT_EQ(analysis.ContainingConstruct(2), 1); + EXPECT_EQ(analysis.ContainingLoop(2), 1); + EXPECT_EQ(analysis.MergeBlock(2), 3); + EXPECT_EQ(analysis.LoopMergeBlock(2), 3); + + // The loop merge node is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(3), 0); + EXPECT_EQ(analysis.ContainingLoop(3), 0); + EXPECT_EQ(analysis.MergeBlock(3), 0); + EXPECT_EQ(analysis.LoopMergeBlock(3), 0); + + // The continue block is in the loop only. + EXPECT_EQ(analysis.ContainingConstruct(4), 1); + EXPECT_EQ(analysis.ContainingLoop(4), 1); + EXPECT_EQ(analysis.MergeBlock(4), 3); + EXPECT_EQ(analysis.LoopMergeBlock(4), 3); + + // BB5 is in the selection fist and the loop. + EXPECT_EQ(analysis.ContainingConstruct(5), 2); + EXPECT_EQ(analysis.ContainingLoop(5), 1); + EXPECT_EQ(analysis.MergeBlock(5), 6); + EXPECT_EQ(analysis.LoopMergeBlock(5), 3); + + // The selection merge is in the loop only. + EXPECT_EQ(analysis.ContainingConstruct(6), 1); + EXPECT_EQ(analysis.ContainingLoop(6), 1); + EXPECT_EQ(analysis.MergeBlock(6), 3); + EXPECT_EQ(analysis.LoopMergeBlock(6), 3); +} + +TEST_F(StructCFGAnalysisTest, LoopInSelection) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%uint = OpTypeInt 32 0 +%uint_undef = OpUndef %uint +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%entry_lab = OpLabel +OpBranch %1 +%1 = OpLabel +OpSelectionMerge %3 None +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpLoopMerge %4 %5 None +OpBranchConditional %undef_bool %4 %6 +%5 = OpLabel +OpBranch %2 +%6 = OpLabel +OpBranch %4 +%4 = OpLabel +OpBranch %3 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // The selection header is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(1), 0); + EXPECT_EQ(analysis.ContainingLoop(1), 0); + EXPECT_EQ(analysis.MergeBlock(1), 0); + EXPECT_EQ(analysis.LoopMergeBlock(1), 0); + + // Loop header is in the selection only. + EXPECT_EQ(analysis.ContainingConstruct(2), 1); + EXPECT_EQ(analysis.ContainingLoop(2), 0); + EXPECT_EQ(analysis.MergeBlock(2), 3); + EXPECT_EQ(analysis.LoopMergeBlock(2), 0); + + // The selection merge node is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(3), 0); + EXPECT_EQ(analysis.ContainingLoop(3), 0); + EXPECT_EQ(analysis.MergeBlock(3), 0); + EXPECT_EQ(analysis.LoopMergeBlock(3), 0); + + // The loop merge is in the selection only. + EXPECT_EQ(analysis.ContainingConstruct(4), 1); + EXPECT_EQ(analysis.ContainingLoop(4), 0); + EXPECT_EQ(analysis.MergeBlock(4), 3); + EXPECT_EQ(analysis.LoopMergeBlock(4), 0); + + // The loop continue target is in the loop. + EXPECT_EQ(analysis.ContainingConstruct(5), 2); + EXPECT_EQ(analysis.ContainingLoop(5), 2); + EXPECT_EQ(analysis.MergeBlock(5), 4); + EXPECT_EQ(analysis.LoopMergeBlock(5), 4); + + // BB6 is in the loop. + EXPECT_EQ(analysis.ContainingConstruct(6), 2); + EXPECT_EQ(analysis.ContainingLoop(6), 2); + EXPECT_EQ(analysis.MergeBlock(6), 4); + EXPECT_EQ(analysis.LoopMergeBlock(6), 4); +} + +TEST_F(StructCFGAnalysisTest, SelectionInSelection) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%uint = OpTypeInt 32 0 +%uint_undef = OpUndef %uint +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%entry_lab = OpLabel +OpBranch %1 +%1 = OpLabel +OpSelectionMerge %3 None +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpSelectionMerge %4 None +OpBranchConditional %undef_bool %4 %5 +%5 = OpLabel +OpBranch %4 +%4 = OpLabel +OpBranch %3 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // The outer selection header is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(1), 0); + EXPECT_EQ(analysis.ContainingLoop(1), 0); + EXPECT_EQ(analysis.MergeBlock(1), 0); + EXPECT_EQ(analysis.LoopMergeBlock(1), 0); + + // The inner header is in the outer selection. + EXPECT_EQ(analysis.ContainingConstruct(2), 1); + EXPECT_EQ(analysis.ContainingLoop(2), 0); + EXPECT_EQ(analysis.MergeBlock(2), 3); + EXPECT_EQ(analysis.LoopMergeBlock(2), 0); + + // The outer merge node is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(3), 0); + EXPECT_EQ(analysis.ContainingLoop(3), 0); + EXPECT_EQ(analysis.MergeBlock(3), 0); + EXPECT_EQ(analysis.LoopMergeBlock(3), 0); + + // The inner merge is in the outer selection. + EXPECT_EQ(analysis.ContainingConstruct(4), 1); + EXPECT_EQ(analysis.ContainingLoop(4), 0); + EXPECT_EQ(analysis.MergeBlock(4), 3); + EXPECT_EQ(analysis.LoopMergeBlock(4), 0); + + // BB5 is in the inner selection. + EXPECT_EQ(analysis.ContainingConstruct(5), 2); + EXPECT_EQ(analysis.ContainingLoop(5), 0); + EXPECT_EQ(analysis.MergeBlock(5), 4); + EXPECT_EQ(analysis.LoopMergeBlock(5), 0); +} + +TEST_F(StructCFGAnalysisTest, LoopInLoop) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%uint = OpTypeInt 32 0 +%uint_undef = OpUndef %uint +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%entry_lab = OpLabel +OpBranch %1 +%1 = OpLabel +OpLoopMerge %3 %7 None +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpLoopMerge %4 %5 None +OpBranchConditional %undef_bool %4 %6 +%5 = OpLabel +OpBranch %2 +%6 = OpLabel +OpBranch %4 +%4 = OpLabel +OpBranch %3 +%7 = OpLabel +OpBranch %1 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // The outer loop header is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(1), 0); + EXPECT_EQ(analysis.ContainingLoop(1), 0); + EXPECT_EQ(analysis.MergeBlock(1), 0); + EXPECT_EQ(analysis.LoopMergeBlock(1), 0); + + // The inner loop header is in the outer loop. + EXPECT_EQ(analysis.ContainingConstruct(2), 1); + EXPECT_EQ(analysis.ContainingLoop(2), 1); + EXPECT_EQ(analysis.MergeBlock(2), 3); + EXPECT_EQ(analysis.LoopMergeBlock(2), 3); + + // The outer merge node is not in either construct. + EXPECT_EQ(analysis.ContainingConstruct(3), 0); + EXPECT_EQ(analysis.ContainingLoop(3), 0); + EXPECT_EQ(analysis.MergeBlock(3), 0); + EXPECT_EQ(analysis.LoopMergeBlock(3), 0); + + // The inner merge is in the outer loop. + EXPECT_EQ(analysis.ContainingConstruct(4), 1); + EXPECT_EQ(analysis.ContainingLoop(4), 1); + EXPECT_EQ(analysis.MergeBlock(4), 3); + EXPECT_EQ(analysis.LoopMergeBlock(4), 3); + + // The inner continue target is in the inner loop. + EXPECT_EQ(analysis.ContainingConstruct(5), 2); + EXPECT_EQ(analysis.ContainingLoop(5), 2); + EXPECT_EQ(analysis.MergeBlock(5), 4); + EXPECT_EQ(analysis.LoopMergeBlock(5), 4); + + // BB6 is in the loop. + EXPECT_EQ(analysis.ContainingConstruct(6), 2); + EXPECT_EQ(analysis.ContainingLoop(6), 2); + EXPECT_EQ(analysis.MergeBlock(6), 4); + EXPECT_EQ(analysis.LoopMergeBlock(6), 4); + + // The outer continue target is in the outer loop. + EXPECT_EQ(analysis.ContainingConstruct(7), 1); + EXPECT_EQ(analysis.ContainingLoop(7), 1); + EXPECT_EQ(analysis.MergeBlock(7), 3); + EXPECT_EQ(analysis.LoopMergeBlock(7), 3); +} + +TEST_F(StructCFGAnalysisTest, KernelTest) { + const std::string text = R"( +OpCapability Kernel +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +%void = OpTypeVoid +%bool = OpTypeBool +%bool_undef = OpUndef %bool +%void_func = OpTypeFunction %void +%main = OpFunction %void None %void_func +%1 = OpLabel +OpBranchConditional %undef_bool %2 %3 +%2 = OpLabel +OpBranch %3 +%3 = OpLabel +OpReturn +OpFunctionEnd +)"; + + std::unique_ptr context = + BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text, + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); + + StructuredCFGAnalysis analysis(context.get()); + + // No structured control flow, so none of the basic block are in any + // construct. + for (uint32_t i = 1; i <= 3; i++) { + EXPECT_EQ(analysis.ContainingConstruct(i), 0); + EXPECT_EQ(analysis.ContainingLoop(i), 0); + EXPECT_EQ(analysis.MergeBlock(i), 0); + EXPECT_EQ(analysis.LoopMergeBlock(i), 0); + } +} + +} // namespace +} // namespace opt +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/opt/type_manager_test.cpp b/3rdparty/spirv-tools/test/opt/type_manager_test.cpp index cf1fcb583..1072c365c 100644 --- a/3rdparty/spirv-tools/test/opt/type_manager_test.cpp +++ b/3rdparty/spirv-tools/test/opt/type_manager_test.cpp @@ -17,6 +17,7 @@ #include #include +#include "effcee/effcee.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "source/opt/build_module.h" @@ -24,17 +25,11 @@ #include "source/opt/type_manager.h" #include "spirv-tools/libspirv.hpp" -#ifdef SPIRV_EFFCEE -#include "effcee/effcee.h" -#endif - namespace spvtools { namespace opt { namespace analysis { namespace { -#ifdef SPIRV_EFFCEE - bool Validate(const std::vector& bin) { spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2; spv_context spvContext = spvContextCreate(target_env); @@ -66,8 +61,6 @@ void Match(const std::string& original, IRContext* context, << assembly; } -#endif - std::vector> GenerateAllTypes() { // Types in this test case are only equal to themselves, nothing else. std::vector> types; @@ -163,7 +156,7 @@ std::vector> GenerateAllTypes() { types.emplace_back(new ReserveId()); types.emplace_back(new Queue()); - // Pipe, Forward Pointer, PipeStorage, NamedBarrier + // Pipe, Forward Pointer, PipeStorage, NamedBarrier, AccelerationStructureNV types.emplace_back(new Pipe(SpvAccessQualifierReadWrite)); types.emplace_back(new Pipe(SpvAccessQualifierReadOnly)); types.emplace_back(new ForwardPointer(1, SpvStorageClassInput)); @@ -171,6 +164,7 @@ std::vector> GenerateAllTypes() { types.emplace_back(new ForwardPointer(2, SpvStorageClassUniform)); types.emplace_back(new PipeStorage()); types.emplace_back(new NamedBarrier()); + types.emplace_back(new AccelerationStructureNV()); return types; } @@ -206,6 +200,7 @@ TEST(TypeManager, TypeStrings) { %pipe = OpTypePipe ReadOnly %ps = OpTypePipeStorage %nb = OpTypeNamedBarrier + %rtacc = OpTypeAccelerationStructureNV )"; std::vector> type_id_strs = { @@ -237,6 +232,7 @@ TEST(TypeManager, TypeStrings) { {26, "pipe(0)"}, {27, "pipe_storage"}, {28, "named_barrier"}, + {29, "accelerationStructureNV"}, }; std::unique_ptr context = @@ -939,7 +935,6 @@ OpMemoryModel Logical GLSL450 EXPECT_EQ(nullptr, context->get_type_mgr()->GetType(id)); } -#ifdef SPIRV_EFFCEE TEST(TypeManager, GetTypeInstructionInt) { const std::string text = R"( ; CHECK: OpTypeInt 32 0 @@ -1043,6 +1038,7 @@ TEST(TypeManager, GetTypeInstructionAllTypes) { ; CHECK: OpTypeForwardPointer [[uniform_ptr]] Uniform ; CHECK: OpTypePipeStorage ; CHECK: OpTypeNamedBarrier +; CHECK: OpTypeAccelerationStructureNV OpCapability Shader OpCapability Int64 OpCapability Linkage @@ -1145,7 +1141,6 @@ OpMemoryModel Logical GLSL450 context->get_type_mgr()->FindPointerToType(2, SpvStorageClassFunction); Match(text, context.get()); } -#endif // SPIRV_EFFCEE } // namespace } // namespace analysis diff --git a/3rdparty/spirv-tools/test/opt/types_test.cpp b/3rdparty/spirv-tools/test/opt/types_test.cpp index c11187e83..7426ed799 100644 --- a/3rdparty/spirv-tools/test/opt/types_test.cpp +++ b/3rdparty/spirv-tools/test/opt/types_test.cpp @@ -88,6 +88,7 @@ TestMultipleInstancesOfTheSameType(Pipe, SpvAccessQualifierReadWrite); TestMultipleInstancesOfTheSameType(ForwardPointer, 10, SpvStorageClassUniform); TestMultipleInstancesOfTheSameType(PipeStorage); TestMultipleInstancesOfTheSameType(NamedBarrier); +TestMultipleInstancesOfTheSameType(AccelerationStructureNV); #undef TestMultipleInstanceOfTheSameType std::vector> GenerateAllTypes() { diff --git a/3rdparty/spirv-tools/test/opt/upgrade_memory_model_test.cpp b/3rdparty/spirv-tools/test/opt/upgrade_memory_model_test.cpp new file mode 100644 index 000000000..90ad601d7 --- /dev/null +++ b/3rdparty/spirv-tools/test/opt/upgrade_memory_model_test.cpp @@ -0,0 +1,1435 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "assembly_builder.h" +#include "gmock/gmock.h" +#include "pass_fixture.h" +#include "pass_utils.h" + +namespace { + +using namespace spvtools; + +using UpgradeMemoryModelTest = opt::PassTest<::testing::Test>; + +#ifdef SPIRV_EFFCEE +TEST_F(UpgradeMemoryModelTest, InvalidMemoryModelOpenCL) { + const std::string text = R"( +; CHECK: OpMemoryModel Logical OpenCL +OpCapability Kernel +OpCapability Linkage +OpMemoryModel Logical OpenCL +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, InvalidMemoryModelVulkanKHR) { + const std::string text = R"( +; CHECK: OpMemoryModel Logical VulkanKHR +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, JustMemoryModel) { + const std::string text = R"( +; CHECK: OpCapability VulkanMemoryModelKHR +; CHECK: OpExtension "SPV_KHR_vulkan_memory_model" +; CHECK: OpMemoryModel Logical VulkanKHR +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, RemoveDecorations) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %var Volatile +OpDecorate %var Coherent +%int = OpTypeInt 32 0 +%ptr_int_Uniform = OpTypePointer Uniform %int +%var = OpVariable %ptr_int_Uniform Uniform +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, WorkgroupVariable) { + const std::string text = R"( +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_Workgroup Workgroup +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %int %var +%st = OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, WorkgroupFunctionParameter) { + const std::string text = R"( +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Workgroup = OpTypePointer Workgroup %int +%func_ty = OpTypeFunction %void %ptr_int_Workgroup +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_int_Workgroup +%1 = OpLabel +%ld = OpLoad %int %param +%st = OpStore %param %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformVariable) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Uniform = OpTypePointer Uniform %int +%var = OpVariable %ptr_int_Uniform Uniform +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %int %var +OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformFunctionParameter) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %param Coherent +OpDecorate %param Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Uniform = OpTypePointer Uniform %int +%func_ty = OpTypeFunction %void %ptr_int_Uniform +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_int_Uniform +%1 = OpLabel +%ld = OpLoad %int %param +OpStore %param %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformVariableOnlyVolatile) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK-NOT: OpConstant +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Uniform = OpTypePointer Uniform %int +%var = OpVariable %ptr_int_Uniform Uniform +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %int %var +OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformVariableCopied) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Uniform = OpTypePointer Uniform %int +%var = OpVariable %ptr_int_Uniform Uniform +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%copy = OpCopyObject %ptr_int_Uniform %var +%ld = OpLoad %int %copy +OpStore %copy %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformFunctionParameterCopied) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %param Coherent +OpDecorate %param Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Uniform = OpTypePointer Uniform %int +%func_ty = OpTypeFunction %void %ptr_int_Uniform +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_int_Uniform +%1 = OpLabel +%copy = OpCopyObject %ptr_int_Uniform %param +%ld = OpLoad %int %copy +%copy2 = OpCopyObject %ptr_int_Uniform %param +OpStore %copy2 %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformVariableAccessChain) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int3 = OpConstant %int 3 +%int_array_3 = OpTypeArray %int %int3 +%ptr_intarray_Uniform = OpTypePointer Uniform %int_array_3 +%ptr_int_Uniform = OpTypePointer Uniform %int +%var = OpVariable %ptr_intarray_Uniform Uniform +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%gep = OpAccessChain %ptr_int_Uniform %var %int0 +%ld = OpLoad %int %gep +OpStore %gep %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, SimpleUniformFunctionParameterAccessChain) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %param Coherent +OpDecorate %param Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int3 = OpConstant %int 3 +%int_array_3 = OpTypeArray %int %int3 +%ptr_intarray_Uniform = OpTypePointer Uniform %int_array_3 +%ptr_int_Uniform = OpTypePointer Uniform %int +%func_ty = OpTypeFunction %void %ptr_intarray_Uniform +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_intarray_Uniform +%1 = OpLabel +%ld_gep = OpAccessChain %ptr_int_Uniform %param %int0 +%ld = OpLoad %int %ld_gep +%st_gep = OpAccessChain %ptr_int_Uniform %param %int0 +OpStore %st_gep %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, VariablePointerSelect) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability VariablePointers +OpExtension "SPV_KHR_variable_pointers" +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%bool = OpTypeBool +%true = OpConstantTrue %bool +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%null = OpConstantNull %ptr_int_StorageBuffer +%var = OpVariable %ptr_int_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%select = OpSelect %ptr_int_StorageBuffer %true %var %null +%ld = OpLoad %int %select +OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, VariablePointerSelectConservative) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability VariablePointers +OpExtension "SPV_KHR_variable_pointers" +OpMemoryModel Logical GLSL450 +OpDecorate %var1 Coherent +OpDecorate %var2 Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%bool = OpTypeBool +%true = OpConstantTrue %bool +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%var1 = OpVariable %ptr_int_StorageBuffer StorageBuffer +%var2 = OpVariable %ptr_int_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%select = OpSelect %ptr_int_StorageBuffer %true %var1 %var2 +%ld = OpLoad %int %select +OpStore %select %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, VariablePointerIncrement) { + const std::string text = R"( +; CHECK-NOT: OpDecorate {{%\w+}} Coherent +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability VariablePointers +OpExtension "SPV_KHR_variable_pointers" +OpMemoryModel Logical GLSL450 +OpDecorate %param Coherent +OpDecorate %param ArrayStride 4 +%void = OpTypeVoid +%bool = OpTypeBool +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%int10 = OpConstant %int 10 +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_int_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_int_StorageBuffer +%1 = OpLabel +OpBranch %2 +%2 = OpLabel +%phi = OpPhi %ptr_int_StorageBuffer %param %1 %ptr_next %2 +%iv = OpPhi %int %int0 %1 %inc %2 +%inc = OpIAdd %int %iv %int1 +%ptr_next = OpPtrAccessChain %ptr_int_StorageBuffer %phi %int1 +%cmp = OpIEqual %bool %iv %int10 +OpLoopMerge %3 %2 None +OpBranchConditional %cmp %3 %2 +%3 = OpLabel +%ld = OpLoad %int %phi +OpStore %phi %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentStructElement) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %struct 0 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%struct = OpTypeStruct %int +%ptr_struct_StorageBuffer = OpTypePointer StorageBuffer %struct +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_struct_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_struct_StorageBuffer +%1 = OpLabel +%gep = OpAccessChain %ptr_int_StorageBuffer %param %int0 +%ld = OpLoad %int %gep +OpStore %gep %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentElementFullStructAccess) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %struct 0 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%struct = OpTypeStruct %int +%ptr_struct_StorageBuffer = OpTypePointer StorageBuffer %struct +%func_ty = OpTypeFunction %void %ptr_struct_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_struct_StorageBuffer +%1 = OpLabel +%ld = OpLoad %struct %param +OpStore %param %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentElementNotAccessed) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK-NOT: MakePointerAvailableKHR +; CHECK-NOT: NonPrivatePointerKHR +; CHECK-NOT: MakePointerVisibleKHR +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %struct 1 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%struct = OpTypeStruct %int %int +%ptr_struct_StorageBuffer = OpTypePointer StorageBuffer %struct +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_struct_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_struct_StorageBuffer +%1 = OpLabel +%gep = OpAccessChain %ptr_int_StorageBuffer %param %int0 +%ld = OpLoad %int %gep +OpStore %gep %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, MultiIndexAccessCoherent) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %inner 1 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%inner = OpTypeStruct %int %int +%middle = OpTypeStruct %inner +%outer = OpTypeStruct %middle %middle +%ptr_outer_StorageBuffer = OpTypePointer StorageBuffer %outer +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_outer_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_outer_StorageBuffer +%1 = OpLabel +%ld_gep = OpInBoundsAccessChain %ptr_int_StorageBuffer %param %int0 %int0 %int1 +%ld = OpLoad %int %ld_gep +%st_gep = OpInBoundsAccessChain %ptr_int_StorageBuffer %param %int1 %int0 %int1 +OpStore %st_gep %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, MultiIndexAccessNonCoherent) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK-NOT: MakePointerAvailableKHR +; CHECK-NOT: NonPrivatePointerKHR +; CHECK-NOT: MakePointerVisibleKHR +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %inner 1 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%inner = OpTypeStruct %int %int +%middle = OpTypeStruct %inner +%outer = OpTypeStruct %middle %middle +%ptr_outer_StorageBuffer = OpTypePointer StorageBuffer %outer +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_outer_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_outer_StorageBuffer +%1 = OpLabel +%ld_gep = OpInBoundsAccessChain %ptr_int_StorageBuffer %param %int0 %int0 %int0 +%ld = OpLoad %int %ld_gep +%st_gep = OpInBoundsAccessChain %ptr_int_StorageBuffer %param %int1 %int0 %int0 +OpStore %st_gep %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, ConsecutiveAccessChainCoherent) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %inner 1 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%inner = OpTypeStruct %int %int +%middle = OpTypeStruct %inner +%outer = OpTypeStruct %middle %middle +%ptr_outer_StorageBuffer = OpTypePointer StorageBuffer %outer +%ptr_middle_StorageBuffer = OpTypePointer StorageBuffer %middle +%ptr_inner_StorageBuffer = OpTypePointer StorageBuffer %inner +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_outer_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_outer_StorageBuffer +%1 = OpLabel +%ld_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int0 +%ld_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %ld_gep1 %int0 +%ld_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %ld_gep2 %int1 +%ld = OpLoad %int %ld_gep3 +%st_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int1 +%st_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %st_gep1 %int0 +%st_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %st_gep2 %int1 +OpStore %st_gep3 %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, ConsecutiveAccessChainNonCoherent) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK-NOT: MakePointerAvailableKHR +; CHECK-NOT: NonPrivatePointerKHR +; CHECK-NOT: MakePointerVisibleKHR +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %inner 1 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%inner = OpTypeStruct %int %int +%middle = OpTypeStruct %inner +%outer = OpTypeStruct %middle %middle +%ptr_outer_StorageBuffer = OpTypePointer StorageBuffer %outer +%ptr_middle_StorageBuffer = OpTypePointer StorageBuffer %middle +%ptr_inner_StorageBuffer = OpTypePointer StorageBuffer %inner +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_outer_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_outer_StorageBuffer +%1 = OpLabel +%ld_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int0 +%ld_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %ld_gep1 %int0 +%ld_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %ld_gep2 %int0 +%ld = OpLoad %int %ld_gep3 +%st_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int1 +%st_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %st_gep1 %int0 +%st_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %st_gep2 %int0 +OpStore %st_gep3 %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentStructElementAccess) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %middle 0 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%inner = OpTypeStruct %int %int +%middle = OpTypeStruct %inner +%outer = OpTypeStruct %middle %middle +%ptr_outer_StorageBuffer = OpTypePointer StorageBuffer %outer +%ptr_middle_StorageBuffer = OpTypePointer StorageBuffer %middle +%ptr_inner_StorageBuffer = OpTypePointer StorageBuffer %inner +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_outer_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_outer_StorageBuffer +%1 = OpLabel +%ld_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int0 +%ld_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %ld_gep1 %int0 +%ld_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %ld_gep2 %int1 +%ld = OpLoad %int %ld_gep3 +%st_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int1 +%st_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %st_gep1 %int0 +%st_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %st_gep2 %int1 +OpStore %st_gep3 %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, NonCoherentLoadCoherentStore) { + const std::string text = R"( +; CHECK-NOT: OpMemberDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK-NOT: MakePointerAvailableKHR +; CHECK: OpStore {{%\w+}} {{%\w+}} MakePointerVisibleKHR|NonPrivatePointerKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpMemberDecorate %outer 1 Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int0 = OpConstant %int 0 +%int1 = OpConstant %int 1 +%inner = OpTypeStruct %int %int +%middle = OpTypeStruct %inner +%outer = OpTypeStruct %middle %middle +%ptr_outer_StorageBuffer = OpTypePointer StorageBuffer %outer +%ptr_middle_StorageBuffer = OpTypePointer StorageBuffer %middle +%ptr_inner_StorageBuffer = OpTypePointer StorageBuffer %inner +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_outer_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_outer_StorageBuffer +%1 = OpLabel +%ld_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int0 +%ld_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %ld_gep1 %int0 +%ld_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %ld_gep2 %int1 +%ld = OpLoad %int %ld_gep3 +%st_gep1 = OpInBoundsAccessChain %ptr_middle_StorageBuffer %param %int1 +%st_gep2 = OpInBoundsAccessChain %ptr_inner_StorageBuffer %st_gep1 %int0 +%st_gep3 = OpInBoundsAccessChain %ptr_int_StorageBuffer %st_gep2 %int1 +OpStore %st_gep3 %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CopyMemory) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[queuefamily:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpCopyMemory {{%\w+}} {{%\w+}} Volatile|MakePointerVisibleKHR|NonPrivatePointerKHR [[queuefamily]] +; CHECK-NOT: [[queuefamily]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %in_var Coherent +OpDecorate %out_var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%in_var = OpVariable %ptr_int_StorageBuffer StorageBuffer +%out_var = OpVariable %ptr_int_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +OpCopyMemory %out_var %in_var +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CopyMemorySized) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[queuefamily:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpCopyMemorySized {{%\w+}} {{%\w+}} {{%\w+}} Volatile|MakePointerAvailableKHR|NonPrivatePointerKHR [[queuefamily]] +; CHECK-NOT: [[queuefamily]] +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %out_param Coherent +OpDecorate %in_param Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%int4 = OpConstant %int 4 +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%func_ty = OpTypeFunction %void %ptr_int_StorageBuffer %ptr_int_StorageBuffer +%func = OpFunction %void None %func_ty +%in_param = OpFunctionParameter %ptr_int_StorageBuffer +%out_param = OpFunctionParameter %ptr_int_StorageBuffer +%1 = OpLabel +OpCopyMemorySized %out_param %in_param %int4 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CopyMemoryTwoScopes) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK-DAG: [[queuefamily:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK-DAG: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: OpCopyMemory {{%\w+}} {{%\w+}} MakePointerAvailableKHR|MakePointerVisibleKHR|NonPrivatePointerKHR [[queuefamily]] [[workgroup]] +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %in_var Coherent +OpDecorate %out_var Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_Workgroup = OpTypePointer Workgroup %int +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%in_var = OpVariable %ptr_int_StorageBuffer StorageBuffer +%out_var = OpVariable %ptr_int_Workgroup Workgroup +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +OpCopyMemory %out_var %in_var +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, VolatileImageRead) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile +; CHECK: OpImageRead {{%\w+}} {{%\w+}} {{%\w+}} VolatileTexelKHR +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageReadWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%int0 = OpConstant %int 0 +%v2int_0 = OpConstantComposite %v2int %int0 %int0 +%image = OpTypeImage %float 2D 0 0 0 2 Unknown +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%var = OpVariable %ptr_image_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %image %var +%rd = OpImageRead %float %ld %v2int_0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentImageRead) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpImageRead {{%\w+}} {{%\w+}} {{%\w+}} MakeTexelAvailableKHR|NonPrivateTexelKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageReadWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%int0 = OpConstant %int 0 +%v2int_0 = OpConstantComposite %v2int %int0 %int0 +%image = OpTypeImage %float 2D 0 0 0 2 Unknown +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%var = OpVariable %ptr_image_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %image %var +%rd = OpImageRead %float %ld %v2int_0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentImageReadExtractedFromSampledImage) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[image:%\w+]] = OpTypeImage +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad [[image]] {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK-NOT: NonPrivatePointerKHR +; CHECK: OpImageRead {{%\w+}} {{%\w+}} {{%\w+}} MakeTexelAvailableKHR|NonPrivateTexelKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageReadWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%int0 = OpConstant %int 0 +%v2int_0 = OpConstantComposite %v2int %int0 %int0 +%image = OpTypeImage %float 2D 0 0 0 0 Unknown +%sampled_image = OpTypeSampledImage %image +%sampler = OpTypeSampler +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%ptr_sampler_StorageBuffer = OpTypePointer StorageBuffer %sampler +%var = OpVariable %ptr_image_StorageBuffer StorageBuffer +%sampler_var = OpVariable %ptr_sampler_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %image %var +%ld_sampler = OpLoad %sampler %sampler_var +%sample = OpSampledImage %sampled_image %ld %ld_sampler +%extract = OpImage %image %sample +%rd = OpImageRead %float %extract %v2int_0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, VolatileImageWrite) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile +; CHECK: OpImageWrite {{%\w+}} {{%\w+}} {{%\w+}} VolatileTexelKHR +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageWriteWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %param Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%float0 = OpConstant %float 0 +%v2int_null = OpConstantNull %v2int +%image = OpTypeImage %float 2D 0 0 0 0 Unknown +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%func_ty = OpTypeFunction %void %ptr_image_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_image_StorageBuffer +%1 = OpLabel +%ld = OpLoad %image %param +OpImageWrite %ld %v2int_null %float0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentImageWrite) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR +; CHECK: OpImageWrite {{%\w+}} {{%\w+}} {{%\w+}} MakeTexelVisibleKHR|NonPrivateTexelKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageWriteWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %param Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%float0 = OpConstant %float 0 +%v2int_null = OpConstantNull %v2int +%image = OpTypeImage %float 2D 0 0 0 0 Unknown +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%func_ty = OpTypeFunction %void %ptr_image_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_image_StorageBuffer +%1 = OpLabel +%ld = OpLoad %image %param +OpImageWrite %ld %v2int_null %float0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentImageWriteExtractFromSampledImage) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR +; CHECK-NOT: NonPrivatePointerKHR +; CHECK: OpImageWrite {{%\w+}} {{%\w+}} {{%\w+}} MakeTexelVisibleKHR|NonPrivateTexelKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageWriteWithoutFormat +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %param Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%float0 = OpConstant %float 0 +%v2int_null = OpConstantNull %v2int +%image = OpTypeImage %float 2D 0 0 0 0 Unknown +%sampled_image = OpTypeSampledImage %image +%sampler = OpTypeSampler +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%ptr_sampler_StorageBuffer = OpTypePointer StorageBuffer %sampler +%func_ty = OpTypeFunction %void %ptr_image_StorageBuffer %ptr_sampler_StorageBuffer +%func = OpFunction %void None %func_ty +%param = OpFunctionParameter %ptr_image_StorageBuffer +%sampler_param = OpFunctionParameter %ptr_sampler_StorageBuffer +%1 = OpLabel +%ld = OpLoad %image %param +%ld_sampler = OpLoad %sampler %sampler_param +%sample = OpSampledImage %sampled_image %ld %ld_sampler +%extract = OpImage %image %sample +OpImageWrite %extract %v2int_null %float0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, VolatileImageSparseRead) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: OpLoad {{%\w+}} {{%\w+}} Volatile +; CHECK: OpImageSparseRead {{%\w+}} {{%\w+}} {{%\w+}} VolatileTexelKHR +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageReadWithoutFormat +OpCapability SparseResidency +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %var Volatile +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%int0 = OpConstant %int 0 +%v2int_0 = OpConstantComposite %v2int %int0 %int0 +%image = OpTypeImage %float 2D 0 0 0 2 Unknown +%struct = OpTypeStruct %int %float +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%var = OpVariable %ptr_image_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %image %var +%rd = OpImageSparseRead %struct %ld %v2int_0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, CoherentImageSparseRead) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad {{%\w+}} {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK: OpImageSparseRead {{%\w+}} {{%\w+}} {{%\w+}} MakeTexelAvailableKHR|NonPrivateTexelKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageReadWithoutFormat +OpCapability SparseResidency +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%int0 = OpConstant %int 0 +%v2int_0 = OpConstantComposite %v2int %int0 %int0 +%image = OpTypeImage %float 2D 0 0 0 2 Unknown +%struct = OpTypeStruct %int %float +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%var = OpVariable %ptr_image_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %image %var +%rd = OpImageSparseRead %struct %ld %v2int_0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, + CoherentImageSparseReadExtractedFromSampledImage) { + const std::string text = R"( +; CHECK-NOT: OpDecorate +; CHECK: [[image:%\w+]] = OpTypeImage +; CHECK: [[scope:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpLoad [[image]] {{%\w+}} MakePointerAvailableKHR|NonPrivatePointerKHR [[scope]] +; CHECK-NOT: NonPrivatePointerKHR +; CHECK: OpImageSparseRead {{%\w+}} {{%\w+}} {{%\w+}} MakeTexelAvailableKHR|NonPrivateTexelKHR [[scope]] +OpCapability Shader +OpCapability Linkage +OpCapability StorageImageReadWithoutFormat +OpCapability SparseResidency +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpDecorate %var Coherent +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%v2int = OpTypeVector %int 2 +%float = OpTypeFloat 32 +%int0 = OpConstant %int 0 +%v2int_0 = OpConstantComposite %v2int %int0 %int0 +%image = OpTypeImage %float 2D 0 0 0 0 Unknown +%struct = OpTypeStruct %int %float +%sampled_image = OpTypeSampledImage %image +%sampler = OpTypeSampler +%ptr_image_StorageBuffer = OpTypePointer StorageBuffer %image +%ptr_sampler_StorageBuffer = OpTypePointer StorageBuffer %sampler +%var = OpVariable %ptr_image_StorageBuffer StorageBuffer +%sampler_var = OpVariable %ptr_sampler_StorageBuffer StorageBuffer +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %image %var +%ld_sampler = OpLoad %sampler %sampler_var +%sample = OpSampledImage %sampled_image %ld %ld_sampler +%extract = OpImage %image %sample +%rd = OpImageSparseRead %struct %extract %v2int_0 +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, TessellationControlBarrierNoChange) { + const std::string text = R"( +; CHECK: [[none:%\w+]] = OpConstant {{%\w+}} 0 +; CHECK: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: OpControlBarrier [[workgroup]] [[workgroup]] [[none]] +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %func "func" +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%workgroup = OpConstant %int 2 +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +OpControlBarrier %workgroup %workgroup %none +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, TessellationControlBarrierAddOutput) { + const std::string text = R"( +; CHECK: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: [[output:%\w+]] = OpConstant {{%\w+}} 4096 +; CHECK: OpControlBarrier [[workgroup]] [[workgroup]] [[output]] +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %func "func" %var +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%workgroup = OpConstant %int 2 +%ptr_int_Output = OpTypePointer Output %int +%var = OpVariable %ptr_int_Output Output +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %int %var +OpControlBarrier %workgroup %workgroup %none +OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, TessellationMemoryBarrierNoChange) { + const std::string text = R"( +; CHECK: [[none:%\w+]] = OpConstant {{%\w+}} 0 +; CHECK: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: OpMemoryBarrier [[workgroup]] [[none]] +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %func "func" %var +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%workgroup = OpConstant %int 2 +%ptr_int_Output = OpTypePointer Output %int +%var = OpVariable %ptr_int_Output Output +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpLoad %int %var +OpMemoryBarrier %workgroup %none +OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, TessellationControlBarrierAddOutputSubFunction) { + const std::string text = R"( +; CHECK: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: [[output:%\w+]] = OpConstant {{%\w+}} 4096 +; CHECK: OpControlBarrier [[workgroup]] [[workgroup]] [[output]] +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %func "func" %var +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%workgroup = OpConstant %int 2 +%ptr_int_Output = OpTypePointer Output %int +%var = OpVariable %ptr_int_Output Output +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +%call = OpFunctionCall %void %sub_func +OpReturn +OpFunctionEnd +%sub_func = OpFunction %void None %func_ty +%2 = OpLabel +%ld = OpLoad %int %var +OpControlBarrier %workgroup %workgroup %none +OpStore %var %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, + TessellationControlBarrierAddOutputDifferentFunctions) { + const std::string text = R"( +; CHECK: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: [[output:%\w+]] = OpConstant {{%\w+}} 4096 +; CHECK: OpControlBarrier [[workgroup]] [[workgroup]] [[output]] +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %func "func" %var +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%workgroup = OpConstant %int 2 +%ptr_int_Output = OpTypePointer Output %int +%var = OpVariable %ptr_int_Output Output +%func_ty = OpTypeFunction %void +%ld_func_ty = OpTypeFunction %int +%st_func_ty = OpTypeFunction %void %int +%func = OpFunction %void None %func_ty +%1 = OpLabel +%call_ld = OpFunctionCall %int %ld_func +%call_barrier = OpFunctionCall %void %barrier_func +%call_st = OpFunctionCall %void %st_func %call_ld +OpReturn +OpFunctionEnd +%ld_func = OpFunction %int None %ld_func_ty +%2 = OpLabel +%ld = OpLoad %int %var +OpReturnValue %ld +OpFunctionEnd +%barrier_func = OpFunction %void None %func_ty +%3 = OpLabel +OpControlBarrier %workgroup %workgroup %none +OpReturn +OpFunctionEnd +%st_func = OpFunction %void None %st_func_ty +%param = OpFunctionParameter %int +%4 = OpLabel +OpStore %var %param +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, ChangeControlBarrierMemoryScope) { + std::string text = R"( +; CHECK: [[workgroup:%\w+]] = OpConstant {{%\w+}} 2 +; CHECK: [[queuefamily:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpControlBarrier [[workgroup]] [[queuefamily]] +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %func "func" +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 2 +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +OpControlBarrier %workgroup %device %none +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, ChangeMemoryBarrierMemoryScope) { + std::string text = R"( +; CHECK: [[queuefamily:%\w+]] = OpConstant {{%\w+}} 5 +; CHECK: OpMemoryBarrier [[queuefamily]] +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %func "func" +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%device = OpConstant %int 1 +%func_ty = OpTypeFunction %void +%func = OpFunction %void None %func_ty +%1 = OpLabel +OpMemoryBarrier %device %none +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +TEST_F(UpgradeMemoryModelTest, ChangeAtomicMemoryScope) { + std::string text = R"( +; CHECK: [[int:%\w+]] = OpTypeInt +; CHECK: [[var:%\w+]] = OpVariable +; CHECK: [[qf:%\w+]] = OpConstant [[int]] 5 +; CHECK: OpAtomicLoad [[int]] [[var]] [[qf]] +; CHECK: OpAtomicStore [[var]] [[qf]] +; CHECK: OpAtomicExchange [[int]] [[var]] [[qf]] +; CHECK: OpAtomicCompareExchange [[int]] [[var]] [[qf]] +; CHECK: OpAtomicIIncrement [[int]] [[var]] [[qf]] +; CHECK: OpAtomicIDecrement [[int]] [[var]] [[qf]] +; CHECK: OpAtomicIAdd [[int]] [[var]] [[qf]] +; CHECK: OpAtomicISub [[int]] [[var]] [[qf]] +; CHECK: OpAtomicSMin [[int]] [[var]] [[qf]] +; CHECK: OpAtomicSMax [[int]] [[var]] [[qf]] +; CHECK: OpAtomicUMin [[int]] [[var]] [[qf]] +; CHECK: OpAtomicUMax [[int]] [[var]] [[qf]] +; CHECK: OpAtomicAnd [[int]] [[var]] [[qf]] +; CHECK: OpAtomicOr [[int]] [[var]] [[qf]] +; CHECK: OpAtomicXor [[int]] [[var]] [[qf]] +OpCapability Shader +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %func "func" +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%none = OpConstant %int 0 +%device = OpConstant %int 1 +%func_ty = OpTypeFunction %void +%ptr_int_StorageBuffer = OpTypePointer StorageBuffer %int +%var = OpVariable %ptr_int_StorageBuffer StorageBuffer +%func = OpFunction %void None %func_ty +%1 = OpLabel +%ld = OpAtomicLoad %int %var %device %none +OpAtomicStore %var %device %none %ld +%ex = OpAtomicExchange %int %var %device %none %ld +%cmp_ex = OpAtomicCompareExchange %int %var %device %none %none %ld %ld +%inc = OpAtomicIIncrement %int %var %device %none +%dec = OpAtomicIDecrement %int %var %device %none +%add = OpAtomicIAdd %int %var %device %none %ld +%sub = OpAtomicISub %int %var %device %none %ld +%smin = OpAtomicSMin %int %var %device %none %ld +%smax = OpAtomicSMax %int %var %device %none %ld +%umin = OpAtomicUMin %int %var %device %none %ld +%umax = OpAtomicUMax %int %var %device %none %ld +%and = OpAtomicAnd %int %var %device %none %ld +%or = OpAtomicOr %int %var %device %none %ld +%xor = OpAtomicXor %int %var %device %none %ld +OpReturn +OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); +} + +#endif + +} // namespace diff --git a/3rdparty/spirv-tools/test/opt/vector_dce_test.cpp b/3rdparty/spirv-tools/test/opt/vector_dce_test.cpp index d1af0de19..40f115c34 100644 --- a/3rdparty/spirv-tools/test/opt/vector_dce_test.cpp +++ b/3rdparty/spirv-tools/test/opt/vector_dce_test.cpp @@ -490,6 +490,7 @@ OpDecorate %OutColor Location 0 %_ptr_Output_v4float = OpTypePointer Output %v4float %OutColor = OpVariable %_ptr_Output_v4float Output %27 = OpUndef %v4float +%55 = OpUndef %v4float )"; const std::string before = @@ -536,25 +537,31 @@ OpFunctionEnd R"(%main = OpFunction %void None %10 %28 = OpLabel %29 = OpLoad %v4float %In0 +%30 = OpLoad %float %In1 +%31 = OpLoad %float %In2 +%32 = OpFAdd %float %30 %31 +%33 = OpCompositeInsert %v4float %32 %29 1 %34 = OpAccessChain %_ptr_Uniform_uint %_ %int_0 %35 = OpLoad %uint %34 %36 = OpINotEqual %bool %35 %uint_0 OpSelectionMerge %37 None OpBranchConditional %36 %38 %37 %38 = OpLabel -%39 = OpCompositeInsert %v4float %float_1 %29 0 +%39 = OpCompositeInsert %v4float %float_1 %55 0 OpBranch %37 %37 = OpLabel %40 = OpPhi %v4float %29 %28 %39 %38 %41 = OpCompositeExtract %float %40 0 -%42 = OpCompositeInsert %v4float %41 %27 0 +%42 = OpCompositeInsert %v4float %41 %55 0 +%43 = OpCompositeExtract %float %40 1 +%44 = OpCompositeInsert %v4float %43 %42 1 %45 = OpAccessChain %_ptr_Uniform_uint %_ %int_1 %46 = OpLoad %uint %45 %47 = OpINotEqual %bool %46 %uint_0 OpSelectionMerge %48 None OpBranchConditional %47 %49 %48 %49 = OpLabel -%50 = OpCompositeInsert %v4float %float_0 %42 0 +%50 = OpCompositeInsert %v4float %float_0 %55 0 OpBranch %48 %48 = OpLabel %51 = OpPhi %v4float %42 %37 %50 %49 @@ -566,8 +573,8 @@ OpReturn OpFunctionEnd )"; - SinglePassRunAndCheck(before_predefs + before, - after_predefs + after, true, true); + SinglePassRunAndCheck(before_predefs + before, + after_predefs + after, true, true); } TEST_F(VectorDCETest, InsertObjectLive) { @@ -608,10 +615,9 @@ OpFunctionEnd )"; SetAssembleOptions(SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS); - SinglePassRunAndCheck(before, before, true, true); + SinglePassRunAndCheck(before, before, true, true); } -#ifdef SPIRV_EFFCEE TEST_F(VectorDCETest, DeadInsertInCycle) { // Dead insert in chain with cycle. Demonstrates analysis can handle // cycles in chains going through scalars intermediate values. @@ -1078,13 +1084,12 @@ TEST_F(VectorDCETest, DeadInsertThroughOtherInst) { SinglePassRunAndMatch(assembly, true); } -#endif TEST_F(VectorDCETest, VectorIntoCompositeConstruct) { const std::string text = R"(OpCapability Linkage OpCapability Shader OpMemoryModel Logical GLSL450 -OpEntryPoint Vertex %1 "EntryPoint_Main" %2 %3 +OpEntryPoint Fragment %1 "EntryPoint_Main" %2 %3 OpExecutionMode %1 OriginUpperLeft OpDecorate %2 Location 0 OpDecorate %_struct_4 Block @@ -1150,7 +1155,39 @@ OpReturn OpFunctionEnd )"; - SinglePassRunAndCheck(text, text, true, true); + SinglePassRunAndCheck(text, text, true, true); +} + +TEST_F(VectorDCETest, InsertWithNoIndices) { + const std::string text = R"( +; CHECK: OpEntryPoint Fragment {{%\w+}} "PSMain" [[in1:%\w+]] [[in2:%\w+]] [[out:%\w+]] +; CHECK: OpFunction +; CHECK: [[ld:%\w+]] = OpLoad %v4float [[in2]] +; CHECK: OpStore [[out]] [[ld]] + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "PSMain" %2 %14 %3 + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %5 = OpTypeFunction %void + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Input_v4float = OpTypePointer Input %v4float +%_ptr_Output_v4float = OpTypePointer Output %v4float + %2 = OpVariable %_ptr_Input_v4float Input + %14 = OpVariable %_ptr_Input_v4float Input + %3 = OpVariable %_ptr_Output_v4float Output + %1 = OpFunction %void None %5 + %10 = OpLabel + %13 = OpLoad %v4float %14 + %11 = OpLoad %v4float %2 + %12 = OpCompositeInsert %v4float %13 %11 + OpStore %3 %12 + OpReturn + OpFunctionEnd +)"; + + SinglePassRunAndMatch(text, true); } } // namespace diff --git a/3rdparty/spirv-tools/test/opt/workaround1209_test.cpp b/3rdparty/spirv-tools/test/opt/workaround1209_test.cpp index 853a01cb2..50d3c0915 100644 --- a/3rdparty/spirv-tools/test/opt/workaround1209_test.cpp +++ b/3rdparty/spirv-tools/test/opt/workaround1209_test.cpp @@ -30,7 +30,6 @@ namespace { using Workaround1209Test = PassTest<::testing::Test>; -#ifdef SPIRV_EFFCEE TEST_F(Workaround1209Test, RemoveOpUnreachableInLoop) { const std::string text = R"( OpCapability Shader @@ -418,7 +417,6 @@ TEST_F(Workaround1209Test, LeaveUnreachableNotInLoop) { SinglePassRunAndMatch(text, false); } -#endif } // namespace } // namespace opt diff --git a/3rdparty/spirv-tools/test/pch_test.cpp b/3rdparty/spirv-tools/test/pch_test.cpp new file mode 100644 index 000000000..3b06a0aa2 --- /dev/null +++ b/3rdparty/spirv-tools/test/pch_test.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_test.h" diff --git a/3rdparty/spirv-tools/test/pch_test.h b/3rdparty/spirv-tools/test/pch_test.h new file mode 100644 index 000000000..7dac06acf --- /dev/null +++ b/3rdparty/spirv-tools/test/pch_test.h @@ -0,0 +1,18 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "gmock/gmock.h" +#include "source/spirv_constant.h" +#include "test/test_fixture.h" +#include "test/unit_spirv.h" diff --git a/3rdparty/spirv-tools/test/reduce/CMakeLists.txt b/3rdparty/spirv-tools/test/reduce/CMakeLists.txt new file mode 100644 index 000000000..b35cdb260 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright (c) 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_spvtools_unittest(TARGET reduce + SRCS operand_to_constant_reduction_pass_test.cpp + operand_to_undef_reduction_pass_test.cpp + operand_to_dominating_id_reduction_pass_test.cpp + reduce_test_util.cpp + reduce_test_util.h + reducer_test.cpp + remove_opname_instruction_reduction_pass_test.cpp + remove_unreferenced_instruction_reduction_pass_test.cpp + structured_loop_to_selection_reduction_pass_test.cpp + validation_during_reduction_test.cpp + LIBS SPIRV-Tools-reduce + ) + diff --git a/3rdparty/spirv-tools/test/reduce/operand_to_constant_reduction_pass_test.cpp b/3rdparty/spirv-tools/test/reduce/operand_to_constant_reduction_pass_test.cpp new file mode 100644 index 000000000..34cc4a117 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/operand_to_constant_reduction_pass_test.cpp @@ -0,0 +1,156 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduce_test_util.h" +#include "source/opt/build_module.h" +#include "source/reduce/operand_to_const_reduction_pass.h" + +namespace spvtools { +namespace reduce { +namespace { + +TEST(OperandToConstantReductionPassTest, BasicCheck) { + std::string prologue = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %37 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %9 "buf1" + OpMemberName %9 0 "f" + OpName %11 "" + OpName %24 "buf2" + OpMemberName %24 0 "i" + OpName %26 "" + OpName %37 "_GLF_color" + OpMemberDecorate %9 0 Offset 0 + OpDecorate %9 Block + OpDecorate %11 DescriptorSet 0 + OpDecorate %11 Binding 1 + OpMemberDecorate %24 0 Offset 0 + OpDecorate %24 Block + OpDecorate %26 DescriptorSet 0 + OpDecorate %26 Binding 2 + OpDecorate %37 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %9 = OpTypeStruct %6 + %10 = OpTypePointer Uniform %9 + %11 = OpVariable %10 Uniform + %12 = OpTypeInt 32 1 + %13 = OpConstant %12 0 + %14 = OpTypePointer Uniform %6 + %20 = OpConstant %6 2 + %24 = OpTypeStruct %12 + %25 = OpTypePointer Uniform %24 + %26 = OpVariable %25 Uniform + %27 = OpTypePointer Uniform %12 + %33 = OpConstant %12 3 + %35 = OpTypeVector %6 4 + %36 = OpTypePointer Output %35 + %37 = OpVariable %36 Output + %4 = OpFunction %2 None %3 + %5 = OpLabel + %15 = OpAccessChain %14 %11 %13 + %16 = OpLoad %6 %15 + %19 = OpFAdd %6 %16 %16 + %21 = OpFAdd %6 %19 %20 + %28 = OpAccessChain %27 %26 %13 + %29 = OpLoad %12 %28 + )"; + + std::string epilogue = R"( + %45 = OpConvertSToF %6 %34 + %46 = OpCompositeConstruct %35 %16 %21 %43 %45 + OpStore %37 %46 + OpReturn + OpFunctionEnd + )"; + + std::string original = prologue + R"( + %32 = OpIAdd %12 %29 %29 + %34 = OpIAdd %12 %32 %33 + %43 = OpConvertSToF %6 %29 + )" + epilogue; + + std::string expected = prologue + R"( + %32 = OpIAdd %12 %13 %13 ; %29 -> %13 x 2 + %34 = OpIAdd %12 %13 %33 ; %32 -> %13 + %43 = OpConvertSToF %6 %13 ; %29 -> %13 + )" + epilogue; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(17, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + ASSERT_TRUE(ops[2]->PreconditionHolds()); + ops[2]->TryToApply(); + ASSERT_TRUE(ops[3]->PreconditionHolds()); + ops[3]->TryToApply(); + + CheckEqual(env, expected, context.get()); +} + +TEST(OperandToConstantReductionPassTest, WithCalledFunction) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %10 %12 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 4 + %8 = OpTypeFunction %7 + %9 = OpTypePointer Output %7 + %10 = OpVariable %9 Output + %11 = OpTypePointer Input %7 + %12 = OpVariable %11 Input + %13 = OpConstant %6 0 + %14 = OpConstantComposite %7 %13 %13 %13 %13 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %15 = OpFunctionCall %7 %16 + OpReturn + OpFunctionEnd + %16 = OpFunction %7 None %8 + %17 = OpLabel + OpReturnValue %14 + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(0, ops.size()); +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/operand_to_dominating_id_reduction_pass_test.cpp b/3rdparty/spirv-tools/test/reduce/operand_to_dominating_id_reduction_pass_test.cpp new file mode 100644 index 000000000..cc0de65cd --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/operand_to_dominating_id_reduction_pass_test.cpp @@ -0,0 +1,196 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/operand_to_dominating_id_reduction_pass.h" +#include "reduce_test_util.h" +#include "source/opt/build_module.h" + +namespace spvtools { +namespace reduce { +namespace { + +TEST(OperandToDominatingIdReductionPassTest, BasicCheck) { + std::string original = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %14 = OpVariable %7 Function + OpStore %8 %9 + %11 = OpLoad %6 %8 + %12 = OpLoad %6 %8 + %13 = OpIAdd %6 %11 %12 + OpStore %10 %13 + %15 = OpLoad %6 %10 + OpStore %14 %15 + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(10, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %14 = OpVariable %7 Function + OpStore %8 %9 + %11 = OpLoad %6 %8 + %12 = OpLoad %6 %8 + %13 = OpIAdd %6 %11 %12 + OpStore %8 %13 ; %10 -> %8 + %15 = OpLoad %6 %10 + OpStore %14 %15 + OpReturn + OpFunctionEnd + )"; + + CheckEqual(env, after_op_0, context.get()); + + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + + std::string after_op_1 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %14 = OpVariable %7 Function + OpStore %8 %9 + %11 = OpLoad %6 %8 + %12 = OpLoad %6 %8 + %13 = OpIAdd %6 %11 %12 + OpStore %8 %13 ; %10 -> %8 + %15 = OpLoad %6 %8 ; %10 -> %8 + OpStore %14 %15 + OpReturn + OpFunctionEnd + )"; + + CheckEqual(env, after_op_1, context.get()); + + ASSERT_TRUE(ops[2]->PreconditionHolds()); + ops[2]->TryToApply(); + + std::string after_op_2 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %14 = OpVariable %7 Function + OpStore %8 %9 + %11 = OpLoad %6 %8 + %12 = OpLoad %6 %8 + %13 = OpIAdd %6 %11 %12 + OpStore %8 %13 ; %10 -> %8 + %15 = OpLoad %6 %8 ; %10 -> %8 + OpStore %8 %15 ; %14 -> %8 + OpReturn + OpFunctionEnd + )"; + + CheckEqual(env, after_op_2, context.get()); + + // The precondition has been disabled by an earlier opportunity's application. + ASSERT_FALSE(ops[3]->PreconditionHolds()); + + ASSERT_TRUE(ops[4]->PreconditionHolds()); + ops[4]->TryToApply(); + + std::string after_op_4 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %14 = OpVariable %7 Function + OpStore %8 %9 + %11 = OpLoad %6 %8 + %12 = OpLoad %6 %8 + %13 = OpIAdd %6 %11 %11 ; %12 -> %11 + OpStore %8 %13 ; %10 -> %8 + %15 = OpLoad %6 %8 ; %10 -> %8 + OpStore %8 %15 ; %14 -> %8 + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_4, context.get()); +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/operand_to_undef_reduction_pass_test.cpp b/3rdparty/spirv-tools/test/reduce/operand_to_undef_reduction_pass_test.cpp new file mode 100644 index 000000000..71bf96cf4 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/operand_to_undef_reduction_pass_test.cpp @@ -0,0 +1,226 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/operand_to_undef_reduction_pass.h" +#include "source/opt/build_module.h" +#include "test/reduce/reduce_test_util.h" + +namespace spvtools { +namespace reduce { +namespace { + +TEST(OperandToUndefReductionPassTest, BasicCheck) { + // The following shader has 10 opportunities for replacing with undef. + + // #version 310 es + // + // precision highp float; + // + // layout(location=0) out vec4 _GLF_color; + // + // layout(set = 0, binding = 0) uniform buf0 { + // vec2 uniform1; + // }; + // + // void main() + // { + // _GLF_color = + // vec4( // opportunity + // uniform1.x / 2.0, // opportunity x2 (2.0 is const) + // uniform1.y / uniform1.x, // opportunity x3 + // uniform1.x + uniform1.x, // opportunity x3 + // uniform1.y); // opportunity + // } + + std::string original = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %9 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %9 "_GLF_color" + OpName %11 "buf0" + OpMemberName %11 0 "uniform1" + OpName %13 "" + OpDecorate %9 Location 0 + OpMemberDecorate %11 0 Offset 0 + OpDecorate %11 Block + OpDecorate %13 DescriptorSet 0 + OpDecorate %13 Binding 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 4 + %8 = OpTypePointer Output %7 + %9 = OpVariable %8 Output + %10 = OpTypeVector %6 2 + %11 = OpTypeStruct %10 + %12 = OpTypePointer Uniform %11 + %13 = OpVariable %12 Uniform + %14 = OpTypeInt 32 1 + %15 = OpConstant %14 0 + %16 = OpTypeInt 32 0 + %17 = OpConstant %16 0 + %18 = OpTypePointer Uniform %6 + %21 = OpConstant %6 2 + %23 = OpConstant %16 1 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %19 = OpAccessChain %18 %13 %15 %17 + %20 = OpLoad %6 %19 + %22 = OpFDiv %6 %20 %21 ; opportunity %20 (%21 is const) + %24 = OpAccessChain %18 %13 %15 %23 + %25 = OpLoad %6 %24 + %26 = OpAccessChain %18 %13 %15 %17 + %27 = OpLoad %6 %26 + %28 = OpFDiv %6 %25 %27 ; opportunity %25 %27 + %29 = OpAccessChain %18 %13 %15 %17 + %30 = OpLoad %6 %29 + %31 = OpAccessChain %18 %13 %15 %17 + %32 = OpLoad %6 %31 + %33 = OpFAdd %6 %30 %32 ; opportunity %30 %32 + %34 = OpAccessChain %18 %13 %15 %23 + %35 = OpLoad %6 %34 + %36 = OpCompositeConstruct %7 %22 %28 %33 %35 ; opportunity %22 %28 %33 %35 + OpStore %9 %36 ; opportunity %36 + OpReturn + OpFunctionEnd + )"; + + // This is the same as original, except where noted. + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %9 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %9 "_GLF_color" + OpName %11 "buf0" + OpMemberName %11 0 "uniform1" + OpName %13 "" + OpDecorate %9 Location 0 + OpMemberDecorate %11 0 Offset 0 + OpDecorate %11 Block + OpDecorate %13 DescriptorSet 0 + OpDecorate %13 Binding 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 4 + %8 = OpTypePointer Output %7 + %9 = OpVariable %8 Output + %10 = OpTypeVector %6 2 + %11 = OpTypeStruct %10 + %12 = OpTypePointer Uniform %11 + %13 = OpVariable %12 Uniform + %14 = OpTypeInt 32 1 + %15 = OpConstant %14 0 + %16 = OpTypeInt 32 0 + %17 = OpConstant %16 0 + %18 = OpTypePointer Uniform %6 + %21 = OpConstant %6 2 + %23 = OpConstant %16 1 + %37 = OpUndef %6 ; Added undef float as %37 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %19 = OpAccessChain %18 %13 %15 %17 + %20 = OpLoad %6 %19 + %22 = OpFDiv %6 %37 %21 ; Replaced with %37 + %24 = OpAccessChain %18 %13 %15 %23 + %25 = OpLoad %6 %24 + %26 = OpAccessChain %18 %13 %15 %17 + %27 = OpLoad %6 %26 + %28 = OpFDiv %6 %37 %37 ; Replaced with %37 twice + %29 = OpAccessChain %18 %13 %15 %17 + %30 = OpLoad %6 %29 + %31 = OpAccessChain %18 %13 %15 %17 + %32 = OpLoad %6 %31 + %33 = OpFAdd %6 %30 %32 + %34 = OpAccessChain %18 %13 %15 %23 + %35 = OpLoad %6 %34 + %36 = OpCompositeConstruct %7 %22 %28 %33 %35 + OpStore %9 %36 + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(10, ops.size()); + + // Apply first three opportunities. + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + ASSERT_TRUE(ops[2]->PreconditionHolds()); + ops[2]->TryToApply(); + + CheckEqual(env, expected, context.get()); +} + +TEST(OperandToUndefReductionPassTest, WithCalledFunction) { + // The following shader has no opportunities. + // Most importantly, the noted function operand is not changed. + + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %10 %12 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 4 + %8 = OpTypeFunction %7 + %9 = OpTypePointer Output %7 + %10 = OpVariable %9 Output + %11 = OpTypePointer Input %7 + %12 = OpVariable %11 Input + %13 = OpConstant %6 0 + %14 = OpConstantComposite %7 %13 %13 %13 %13 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %15 = OpFunctionCall %7 %16 ; do not replace %16 with undef + OpReturn + OpFunctionEnd + %16 = OpFunction %7 None %8 + %17 = OpLabel + OpReturnValue %14 + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(0, ops.size()); +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/reduce_test_util.cpp b/3rdparty/spirv-tools/test/reduce/reduce_test_util.cpp new file mode 100644 index 000000000..19ef74989 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/reduce_test_util.cpp @@ -0,0 +1,72 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduce_test_util.h" + +namespace spvtools { +namespace reduce { + +void CheckEqual(const spv_target_env env, + const std::vector& expected_binary, + const std::vector& actual_binary) { + if (expected_binary != actual_binary) { + SpirvTools t(env); + std::string expected_disassembled; + std::string actual_disassembled; + ASSERT_TRUE(t.Disassemble(expected_binary, &expected_disassembled, + kReduceDisassembleOption)); + ASSERT_TRUE(t.Disassemble(actual_binary, &actual_disassembled, + kReduceDisassembleOption)); + ASSERT_EQ(expected_disassembled, actual_disassembled); + } +} + +void CheckEqual(const spv_target_env env, const std::string& expected_text, + const std::vector& actual_binary) { + std::vector expected_binary; + SpirvTools t(env); + ASSERT_TRUE( + t.Assemble(expected_text, &expected_binary, kReduceAssembleOption)); + CheckEqual(env, expected_binary, actual_binary); +} + +void CheckEqual(const spv_target_env env, const std::string& expected_text, + const opt::IRContext* actual_ir) { + std::vector actual_binary; + actual_ir->module()->ToBinary(&actual_binary, false); + CheckEqual(env, expected_text, actual_binary); +} + +void CheckValid(spv_target_env env, const opt::IRContext* ir) { + std::vector binary; + ir->module()->ToBinary(&binary, false); + SpirvTools t(env); + ASSERT_TRUE(t.Validate(binary)); +} + +std::string ToString(spv_target_env env, const opt::IRContext* ir) { + std::vector binary; + ir->module()->ToBinary(&binary, false); + SpirvTools t(env); + std::string result; + t.Disassemble(binary, &result, kReduceDisassembleOption); + return result; +} + +void NopDiagnostic(spv_message_level_t /*level*/, const char* /*source*/, + const spv_position_t& /*position*/, + const char* /*message*/) {} + +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/reduce_test_util.h b/3rdparty/spirv-tools/test/reduce/reduce_test_util.h new file mode 100644 index 000000000..499c77475 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/reduce_test_util.h @@ -0,0 +1,82 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef TEST_REDUCE_REDUCE_TEST_UTIL_H_ +#define TEST_REDUCE_REDUCE_TEST_UTIL_H_ + +#include "gtest/gtest.h" + +#include "source/opt/ir_context.h" +#include "source/reduce/reduction_opportunity.h" +#include "spirv-tools/libspirv.h" + +namespace spvtools { +namespace reduce { + +// A helper class that subclasses a given reduction pass class in order to +// provide a wrapper for its protected methods. +template +class TestSubclass : public ReductionPassT { + public: + // Creates an instance of the reduction pass subclass with respect to target + // environment |env|. + explicit TestSubclass(const spv_target_env env) : ReductionPassT(env) {} + ~TestSubclass() = default; + + // A wrapper for GetAvailableOpportunities(...) + std::vector> + WrapGetAvailableOpportunities(opt::IRContext* context) const { + return ReductionPassT::GetAvailableOpportunities(context); + } +}; + +// Checks whether the given binaries are bit-wise equal. +void CheckEqual(spv_target_env env, + const std::vector& expected_binary, + const std::vector& actual_binary); + +// Assembles the given text and check whether the resulting binary is bit-wise +// equal to the given binary. +void CheckEqual(spv_target_env env, const std::string& expected_text, + const std::vector& actual_binary); + +// Assembles the given text and turns the given IR into binary, then checks +// whether the resulting binaries are bit-wise equal. +void CheckEqual(spv_target_env env, const std::string& expected_text, + const opt::IRContext* actual_ir); + +// Assembles the given IR context and checks whether the resulting binary is +// valid. +void CheckValid(spv_target_env env, const opt::IRContext* ir); + +// Assembles the given IR context, then returns its disassembly as a string. +// Useful for debugging. +std::string ToString(spv_target_env env, const opt::IRContext* ir); + +// Assembly options for writing reduction tests. It simplifies matters if +// numeric ids do not change. +const uint32_t kReduceAssembleOption = + SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS; +// Disassembly options for writing reduction tests. +const uint32_t kReduceDisassembleOption = + SPV_BINARY_TO_TEXT_OPTION_NO_HEADER | SPV_BINARY_TO_TEXT_OPTION_INDENT; + +// Don't print reducer info during testing. +void NopDiagnostic(spv_message_level_t /*level*/, const char* /*source*/, + const spv_position_t& /*position*/, const char* /*message*/); + +} // namespace reduce +} // namespace spvtools + +#endif // TEST_REDUCE_REDUCE_TEST_UTIL_H_ diff --git a/3rdparty/spirv-tools/test/reduce/reducer_test.cpp b/3rdparty/spirv-tools/test/reduce/reducer_test.cpp new file mode 100644 index 000000000..88fc5e44e --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/reducer_test.cpp @@ -0,0 +1,310 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduce_test_util.h" + +#include "source/reduce/operand_to_const_reduction_pass.h" +#include "source/reduce/reducer.h" +#include "source/reduce/remove_opname_instruction_reduction_pass.h" +#include "source/reduce/remove_unreferenced_instruction_reduction_pass.h" + +namespace spvtools { +namespace reduce { +namespace { + +// This changes its mind each time IsInteresting is invoked as to whether the +// binary is interesting, until some limit is reached after which the binary is +// always deemed interesting. This is useful to test that reduction passes +// interleave in interesting ways for a while, and then always succeed after +// some point; the latter is important to end up with a predictable final +// reduced binary for tests. +class PingPongInteresting { + public: + explicit PingPongInteresting(uint32_t always_interesting_after) + : is_interesting_(true), + always_interesting_after_(always_interesting_after), + count_(0) {} + + bool IsInteresting(const std::vector&) { + bool result; + if (count_ > always_interesting_after_) { + result = true; + } else { + result = is_interesting_; + is_interesting_ = !is_interesting_; + } + count_++; + return result; + } + + private: + bool is_interesting_; + const uint32_t always_interesting_after_; + uint32_t count_; +}; + +TEST(ReducerTest, ExprToConstantAndRemoveUnreferenced) { + std::string original = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %60 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %16 "buf2" + OpMemberName %16 0 "i" + OpName %18 "" + OpName %25 "buf1" + OpMemberName %25 0 "f" + OpName %27 "" + OpName %60 "_GLF_color" + OpMemberDecorate %16 0 Offset 0 + OpDecorate %16 Block + OpDecorate %18 DescriptorSet 0 + OpDecorate %18 Binding 2 + OpMemberDecorate %25 0 Offset 0 + OpDecorate %25 Block + OpDecorate %27 DescriptorSet 0 + OpDecorate %27 Binding 1 + OpDecorate %60 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %9 = OpConstant %6 0 + %16 = OpTypeStruct %6 + %17 = OpTypePointer Uniform %16 + %18 = OpVariable %17 Uniform + %19 = OpTypePointer Uniform %6 + %22 = OpTypeBool + %100 = OpConstantTrue %22 + %24 = OpTypeFloat 32 + %25 = OpTypeStruct %24 + %26 = OpTypePointer Uniform %25 + %27 = OpVariable %26 Uniform + %28 = OpTypePointer Uniform %24 + %31 = OpConstant %24 2 + %56 = OpConstant %6 1 + %58 = OpTypeVector %24 4 + %59 = OpTypePointer Output %58 + %60 = OpVariable %59 Output + %72 = OpUndef %24 + %74 = OpUndef %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %10 + %10 = OpLabel + %73 = OpPhi %6 %74 %5 %77 %34 + %71 = OpPhi %24 %72 %5 %76 %34 + %70 = OpPhi %6 %9 %5 %57 %34 + %20 = OpAccessChain %19 %18 %9 + %21 = OpLoad %6 %20 + %23 = OpSLessThan %22 %70 %21 + OpLoopMerge %12 %34 None + OpBranchConditional %23 %11 %12 + %11 = OpLabel + %29 = OpAccessChain %28 %27 %9 + %30 = OpLoad %24 %29 + %32 = OpFOrdGreaterThan %22 %30 %31 + OpSelectionMerge %34 None + OpBranchConditional %32 %33 %46 + %33 = OpLabel + %40 = OpFAdd %24 %71 %30 + %45 = OpISub %6 %73 %21 + OpBranch %34 + %46 = OpLabel + %50 = OpFMul %24 %71 %30 + %54 = OpSDiv %6 %73 %21 + OpBranch %34 + %34 = OpLabel + %77 = OpPhi %6 %45 %33 %54 %46 + %76 = OpPhi %24 %40 %33 %50 %46 + %57 = OpIAdd %6 %70 %56 + OpBranch %10 + %12 = OpLabel + %61 = OpAccessChain %28 %27 %9 + %62 = OpLoad %24 %61 + %66 = OpConvertSToF %24 %21 + %68 = OpConvertSToF %24 %73 + %69 = OpCompositeConstruct %58 %62 %71 %66 %68 + OpStore %60 %69 + OpReturn + OpFunctionEnd + )"; + + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %60 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %16 "buf2" + OpMemberName %16 0 "i" + OpName %18 "" + OpName %25 "buf1" + OpMemberName %25 0 "f" + OpName %27 "" + OpName %60 "_GLF_color" + OpMemberDecorate %16 0 Offset 0 + OpDecorate %16 Block + OpDecorate %18 DescriptorSet 0 + OpDecorate %18 Binding 2 + OpMemberDecorate %25 0 Offset 0 + OpDecorate %25 Block + OpDecorate %27 DescriptorSet 0 + OpDecorate %27 Binding 1 + OpDecorate %60 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %9 = OpConstant %6 0 + %16 = OpTypeStruct %6 + %17 = OpTypePointer Uniform %16 + %18 = OpVariable %17 Uniform + %19 = OpTypePointer Uniform %6 + %22 = OpTypeBool + %100 = OpConstantTrue %22 + %24 = OpTypeFloat 32 + %25 = OpTypeStruct %24 + %26 = OpTypePointer Uniform %25 + %27 = OpVariable %26 Uniform + %28 = OpTypePointer Uniform %24 + %31 = OpConstant %24 2 + %56 = OpConstant %6 1 + %58 = OpTypeVector %24 4 + %59 = OpTypePointer Output %58 + %60 = OpVariable %59 Output + %72 = OpUndef %24 + %74 = OpUndef %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %10 + %10 = OpLabel + OpLoopMerge %12 %34 None + OpBranchConditional %100 %11 %12 + %11 = OpLabel + OpSelectionMerge %34 None + OpBranchConditional %100 %33 %46 + %33 = OpLabel + OpBranch %34 + %46 = OpLabel + OpBranch %34 + %34 = OpLabel + OpBranch %10 + %12 = OpLabel + OpReturn + OpFunctionEnd + )"; + + spv_target_env env = SPV_ENV_UNIVERSAL_1_3; + Reducer reducer(env); + PingPongInteresting ping_pong_interesting(10); + reducer.SetMessageConsumer(NopDiagnostic); + reducer.SetInterestingnessFunction( + [&](const std::vector& binary, uint32_t) -> bool { + return ping_pong_interesting.IsInteresting(binary); + }); + reducer.AddReductionPass(MakeUnique(env)); + reducer.AddReductionPass( + MakeUnique(env)); + + std::vector binary_in; + SpirvTools t(env); + + ASSERT_TRUE(t.Assemble(original, &binary_in, kReduceAssembleOption)); + std::vector binary_out; + spvtools::ReducerOptions reducer_options; + reducer_options.set_step_limit(500); + + reducer.Run(std::move(binary_in), &binary_out, reducer_options); + + CheckEqual(env, expected, binary_out); +} + +TEST(ReducerTest, RemoveOpnameAndRemoveUnreferenced) { + const std::string original = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpName %2 "main" + OpName %3 "a" + OpName %4 "this-name-counts-as-usage-for-load-instruction" + %5 = OpTypeVoid + %6 = OpTypeFunction %5 + %7 = OpTypeFloat 32 + %8 = OpTypePointer Function %7 + %9 = OpConstant %7 1 + %2 = OpFunction %5 None %6 + %10 = OpLabel + %3 = OpVariable %8 Function + %4 = OpLoad %7 %3 + OpStore %3 %7 + OpReturn + OpFunctionEnd + )"; + + const std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %5 = OpTypeVoid + %6 = OpTypeFunction %5 + %7 = OpTypeFloat 32 + %8 = OpTypePointer Function %7 + %9 = OpConstant %7 1 + %2 = OpFunction %5 None %6 + %10 = OpLabel + OpReturn + OpFunctionEnd + )"; + + spv_target_env env = SPV_ENV_UNIVERSAL_1_3; + Reducer reducer(env); + // Make ping-pong interesting very quickly, as there are not much + // opportunities. + PingPongInteresting ping_pong_interesting(1); + reducer.SetMessageConsumer(NopDiagnostic); + reducer.SetInterestingnessFunction( + [&](const std::vector& binary, uint32_t) -> bool { + return ping_pong_interesting.IsInteresting(binary); + }); + reducer.AddReductionPass( + MakeUnique(env)); + reducer.AddReductionPass( + MakeUnique(env)); + + std::vector binary_in; + SpirvTools t(env); + + ASSERT_TRUE(t.Assemble(original, &binary_in, kReduceAssembleOption)); + std::vector binary_out; + spvtools::ReducerOptions reducer_options; + reducer_options.set_step_limit(500); + + reducer.Run(std::move(binary_in), &binary_out, reducer_options); + + CheckEqual(env, expected, binary_out); +} + +} // namespace +} // namespace reduce +} // namespace spvtools \ No newline at end of file diff --git a/3rdparty/spirv-tools/test/reduce/remove_opname_instruction_reduction_pass_test.cpp b/3rdparty/spirv-tools/test/reduce/remove_opname_instruction_reduction_pass_test.cpp new file mode 100644 index 000000000..38a2d7f77 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/remove_opname_instruction_reduction_pass_test.cpp @@ -0,0 +1,216 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduce_test_util.h" + +#include "source/opt/build_module.h" +#include "source/reduce/reduction_opportunity.h" +#include "source/reduce/remove_opname_instruction_reduction_pass.h" + +namespace spvtools { +namespace reduce { +namespace { + +TEST(RemoveOpnameInstructionReductionPassTest, NothingToRemove) { + const std::string source = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, source, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(0, ops.size()); +} + +TEST(RemoveOpnameInstructionReductionPassTest, RemoveSingleOpName) { + const std::string prologue = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + )"; + + const std::string epilogue = R"( + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const std::string original = prologue + R"( + OpName %4 "main" + )" + epilogue; + + const std::string expected = prologue + epilogue; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckEqual(env, expected, context.get()); +} + +TEST(RemoveOpnameInstructionReductionPassTest, TryApplyRemovesAllOpName) { + const std::string prologue = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + )"; + + const std::string epilogue = R"( + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 1 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %11 = OpVariable %7 Function + %12 = OpVariable %7 Function + OpStore %8 %9 + OpStore %10 %9 + OpStore %11 %9 + OpStore %12 %9 + OpReturn + OpFunctionEnd + )"; + + const std::string original = prologue + R"( + OpName %4 "main" + OpName %8 "a" + OpName %10 "b" + OpName %11 "c" + OpName %12 "d" + )" + epilogue; + + const std::string expected = prologue + epilogue; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + auto pass = TestSubclass(env); + + { + // Check the right number of opportunities is detected + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(5, ops.size()); + } + + { + // The reduction should remove all OpName + std::vector binary; + SpirvTools t(env); + ASSERT_TRUE(t.Assemble(original, &binary, kReduceAssembleOption)); + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected, reduced_binary); + } +} + +TEST(RemoveOpnameInstructionReductionPassTest, + TryApplyRemovesAllOpNameAndOpMemberName) { + const std::string prologue = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + )"; + + const std::string epilogue = R"( + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeInt 32 1 + %8 = OpTypeVector %6 3 + %9 = OpTypeStruct %6 %7 %8 + %10 = OpTypePointer Function %9 + %12 = OpConstant %7 0 + %13 = OpConstant %6 1 + %14 = OpTypePointer Function %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %11 = OpVariable %10 Function + %15 = OpAccessChain %14 %11 %12 + OpStore %15 %13 + OpReturn + OpFunctionEnd + )"; + + const std::string original = prologue + R"( + OpName %4 "main" + OpName %9 "S" + OpMemberName %9 0 "f" + OpMemberName %9 1 "i" + OpMemberName %9 2 "v" + OpName %11 "s" + )" + epilogue; + + const std::string expected = prologue + epilogue; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + auto pass = TestSubclass(env); + + { + // Check the right number of opportunities is detected + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(6, ops.size()); + } + + { + // The reduction should remove all OpName + std::vector binary; + SpirvTools t(env); + ASSERT_TRUE(t.Assemble(original, &binary, kReduceAssembleOption)); + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected, reduced_binary); + } +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/remove_unreferenced_instruction_reduction_pass_test.cpp b/3rdparty/spirv-tools/test/reduce/remove_unreferenced_instruction_reduction_pass_test.cpp new file mode 100644 index 000000000..a002fa36a --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/remove_unreferenced_instruction_reduction_pass_test.cpp @@ -0,0 +1,230 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduce_test_util.h" + +#include "source/opt/build_module.h" +#include "source/reduce/reduction_opportunity.h" +#include "source/reduce/remove_unreferenced_instruction_reduction_pass.h" + +namespace spvtools { +namespace reduce { +namespace { + +TEST(RemoveUnreferencedInstructionReductionPassTest, RemoveStores) { + const std::string prologue = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %8 "a" + OpName %10 "b" + OpName %12 "c" + OpName %14 "d" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 10 + %11 = OpConstant %6 20 + %13 = OpConstant %6 30 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %12 = OpVariable %7 Function + %14 = OpVariable %7 Function + )"; + + const std::string epilogue = R"( + OpReturn + OpFunctionEnd + )"; + + const std::string original = prologue + R"( + OpStore %8 %9 + OpStore %10 %11 + OpStore %12 %13 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + + const std::string expected = prologue + R"( + OpStore %12 %13 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto consumer = nullptr; + const auto context = + BuildModule(env, consumer, original, kReduceAssembleOption); + const auto pass = + TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(4, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + + CheckEqual(env, expected, context.get()); +} + +TEST(RemoveUnreferencedInstructionReductionPassTest, ApplyReduction) { + const std::string prologue = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %8 "a" + OpName %10 "b" + OpName %12 "c" + OpName %14 "d" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 10 + %11 = OpConstant %6 20 + %13 = OpConstant %6 30 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %10 = OpVariable %7 Function + %12 = OpVariable %7 Function + %14 = OpVariable %7 Function + )"; + + const std::string epilogue = R"( + OpReturn + OpFunctionEnd + )"; + + const std::string original = prologue + R"( + OpStore %8 %9 + OpStore %10 %11 + OpStore %12 %13 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + + std::vector binary; + SpirvTools t(env); + ASSERT_TRUE(t.Assemble(original, &binary, kReduceAssembleOption)); + + auto pass = TestSubclass(env); + + { + // Attempt 1 should remove everything removable. + const std::string expected_reduced = prologue + R"( + %15 = OpLoad %6 %8 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + // Attempt 2 should fail as pass with granularity 4 got to end. + ASSERT_EQ(0, pass.TryApplyReduction(binary).size()); + + { + // Attempt 3 should remove first two removable statements. + const std::string expected_reduced = prologue + R"( + OpStore %12 %13 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + { + // Attempt 4 should remove last two removable statements. + const std::string expected_reduced = prologue + R"( + OpStore %8 %9 + OpStore %10 %11 + %15 = OpLoad %6 %8 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + // Attempt 5 should fail as pass with granularity 2 got to end. + ASSERT_EQ(0, pass.TryApplyReduction(binary).size()); + + { + // Attempt 6 should remove first removable statement. + const std::string expected_reduced = prologue + R"( + OpStore %10 %11 + OpStore %12 %13 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + { + // Attempt 7 should remove second removable statement. + const std::string expected_reduced = prologue + R"( + OpStore %8 %9 + OpStore %12 %13 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + { + // Attempt 8 should remove third removable statement. + const std::string expected_reduced = prologue + R"( + OpStore %8 %9 + OpStore %10 %11 + %15 = OpLoad %6 %8 + OpStore %14 %15 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + { + // Attempt 9 should remove fourth removable statement. + const std::string expected_reduced = prologue + R"( + OpStore %8 %9 + OpStore %10 %11 + OpStore %12 %13 + %15 = OpLoad %6 %8 + )" + epilogue; + auto reduced_binary = pass.TryApplyReduction(binary); + CheckEqual(env, expected_reduced, reduced_binary); + } + + // Attempt 10 should fail as pass with granularity 1 got to end. + ASSERT_EQ(0, pass.TryApplyReduction(binary).size()); + + ASSERT_TRUE(pass.ReachedMinimumGranularity()); +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/structured_loop_to_selection_reduction_pass_test.cpp b/3rdparty/spirv-tools/test/reduce/structured_loop_to_selection_reduction_pass_test.cpp new file mode 100644 index 000000000..8388cb2e2 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/structured_loop_to_selection_reduction_pass_test.cpp @@ -0,0 +1,3440 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/reduce/structured_loop_to_selection_reduction_pass.h" +#include "reduce_test_util.h" +#include "source/opt/build_module.h" + +namespace spvtools { +namespace reduce { +namespace { + +TEST(StructuredLoopToSelectionReductionPassTest, LoopyShader1) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %20 = OpConstant %6 1 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %14 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpBranch %13 + %13 = OpLabel + %19 = OpLoad %6 %8 + %21 = OpIAdd %6 %19 %20 + OpStore %8 %21 + OpBranch %10 + %12 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %20 = OpConstant %6 1 + %22 = OpConstantTrue %17 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %22 %14 %12 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpBranch %12 + %13 = OpLabel + %19 = OpLoad %6 %8 + %21 = OpIAdd %6 %19 %20 + OpStore %8 %21 + OpBranch %10 + %12 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, LoopyShader2) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %28 = OpConstant %6 1 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %19 = OpVariable %7 Function + %32 = OpVariable %7 Function + %40 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %14 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpStore %19 %9 + OpBranch %20 + %20 = OpLabel + OpLoopMerge %22 %23 None + OpBranch %24 + %24 = OpLabel + %25 = OpLoad %6 %19 + %26 = OpSLessThan %17 %25 %16 + OpBranchConditional %26 %21 %22 + %21 = OpLabel + OpBranch %23 + %23 = OpLabel + %27 = OpLoad %6 %19 + %29 = OpIAdd %6 %27 %28 + OpStore %19 %29 + OpBranch %20 + %22 = OpLabel + OpBranch %13 + %13 = OpLabel + %30 = OpLoad %6 %8 + %31 = OpIAdd %6 %30 %28 + OpStore %8 %31 + OpBranch %10 + %12 = OpLabel + OpStore %32 %9 + OpBranch %33 + %33 = OpLabel + OpLoopMerge %35 %36 None + OpBranch %37 + %37 = OpLabel + %38 = OpLoad %6 %32 + %39 = OpSLessThan %17 %38 %16 + OpBranchConditional %39 %34 %35 + %34 = OpLabel + OpStore %40 %9 + OpBranch %41 + %41 = OpLabel + OpLoopMerge %43 %44 None + OpBranch %45 + %45 = OpLabel + %46 = OpLoad %6 %40 + %47 = OpSLessThan %17 %46 %16 + OpBranchConditional %47 %42 %43 + %42 = OpLabel + OpBranch %44 + %44 = OpLabel + %48 = OpLoad %6 %40 + %49 = OpIAdd %6 %48 %28 + OpStore %40 %49 + OpBranch %41 + %43 = OpLabel + OpBranch %36 + %36 = OpLabel + %50 = OpLoad %6 %32 + %51 = OpIAdd %6 %50 %28 + OpStore %32 %51 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(4, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %28 = OpConstant %6 1 + %52 = OpConstantTrue %17 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %19 = OpVariable %7 Function + %32 = OpVariable %7 Function + %40 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %52 %14 %12 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpStore %19 %9 + OpBranch %20 + %20 = OpLabel + OpLoopMerge %22 %23 None + OpBranch %24 + %24 = OpLabel + %25 = OpLoad %6 %19 + %26 = OpSLessThan %17 %25 %16 + OpBranchConditional %26 %21 %22 + %21 = OpLabel + OpBranch %23 + %23 = OpLabel + %27 = OpLoad %6 %19 + %29 = OpIAdd %6 %27 %28 + OpStore %19 %29 + OpBranch %20 + %22 = OpLabel + OpBranch %12 + %13 = OpLabel + %30 = OpLoad %6 %8 + %31 = OpIAdd %6 %30 %28 + OpStore %8 %31 + OpBranch %10 + %12 = OpLabel + OpStore %32 %9 + OpBranch %33 + %33 = OpLabel + OpLoopMerge %35 %36 None + OpBranch %37 + %37 = OpLabel + %38 = OpLoad %6 %32 + %39 = OpSLessThan %17 %38 %16 + OpBranchConditional %39 %34 %35 + %34 = OpLabel + OpStore %40 %9 + OpBranch %41 + %41 = OpLabel + OpLoopMerge %43 %44 None + OpBranch %45 + %45 = OpLabel + %46 = OpLoad %6 %40 + %47 = OpSLessThan %17 %46 %16 + OpBranchConditional %47 %42 %43 + %42 = OpLabel + OpBranch %44 + %44 = OpLabel + %48 = OpLoad %6 %40 + %49 = OpIAdd %6 %48 %28 + OpStore %40 %49 + OpBranch %41 + %43 = OpLabel + OpBranch %36 + %36 = OpLabel + %50 = OpLoad %6 %32 + %51 = OpIAdd %6 %50 %28 + OpStore %32 %51 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_1 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %28 = OpConstant %6 1 + %52 = OpConstantTrue %17 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %19 = OpVariable %7 Function + %32 = OpVariable %7 Function + %40 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %52 %14 %12 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpStore %19 %9 + OpBranch %20 + %20 = OpLabel + OpSelectionMerge %22 None + OpBranchConditional %52 %24 %22 + %24 = OpLabel + %25 = OpLoad %6 %19 + %26 = OpSLessThan %17 %25 %16 + OpBranchConditional %26 %21 %22 + %21 = OpLabel + OpBranch %22 + %23 = OpLabel + %27 = OpLoad %6 %19 + %29 = OpIAdd %6 %27 %28 + OpStore %19 %29 + OpBranch %20 + %22 = OpLabel + OpBranch %12 + %13 = OpLabel + %30 = OpLoad %6 %8 + %31 = OpIAdd %6 %30 %28 + OpStore %8 %31 + OpBranch %10 + %12 = OpLabel + OpStore %32 %9 + OpBranch %33 + %33 = OpLabel + OpLoopMerge %35 %36 None + OpBranch %37 + %37 = OpLabel + %38 = OpLoad %6 %32 + %39 = OpSLessThan %17 %38 %16 + OpBranchConditional %39 %34 %35 + %34 = OpLabel + OpStore %40 %9 + OpBranch %41 + %41 = OpLabel + OpLoopMerge %43 %44 None + OpBranch %45 + %45 = OpLabel + %46 = OpLoad %6 %40 + %47 = OpSLessThan %17 %46 %16 + OpBranchConditional %47 %42 %43 + %42 = OpLabel + OpBranch %44 + %44 = OpLabel + %48 = OpLoad %6 %40 + %49 = OpIAdd %6 %48 %28 + OpStore %40 %49 + OpBranch %41 + %43 = OpLabel + OpBranch %36 + %36 = OpLabel + %50 = OpLoad %6 %32 + %51 = OpIAdd %6 %50 %28 + OpStore %32 %51 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_1, context.get()); + + ASSERT_TRUE(ops[2]->PreconditionHolds()); + ops[2]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_2 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %28 = OpConstant %6 1 + %52 = OpConstantTrue %17 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %19 = OpVariable %7 Function + %32 = OpVariable %7 Function + %40 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %52 %14 %12 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpStore %19 %9 + OpBranch %20 + %20 = OpLabel + OpSelectionMerge %22 None + OpBranchConditional %52 %24 %22 + %24 = OpLabel + %25 = OpLoad %6 %19 + %26 = OpSLessThan %17 %25 %16 + OpBranchConditional %26 %21 %22 + %21 = OpLabel + OpBranch %22 + %23 = OpLabel + %27 = OpLoad %6 %19 + %29 = OpIAdd %6 %27 %28 + OpStore %19 %29 + OpBranch %20 + %22 = OpLabel + OpBranch %12 + %13 = OpLabel + %30 = OpLoad %6 %8 + %31 = OpIAdd %6 %30 %28 + OpStore %8 %31 + OpBranch %10 + %12 = OpLabel + OpStore %32 %9 + OpBranch %33 + %33 = OpLabel + OpSelectionMerge %35 None + OpBranchConditional %52 %37 %35 + %37 = OpLabel + %38 = OpLoad %6 %32 + %39 = OpSLessThan %17 %38 %16 + OpBranchConditional %39 %34 %35 + %34 = OpLabel + OpStore %40 %9 + OpBranch %41 + %41 = OpLabel + OpLoopMerge %43 %44 None + OpBranch %45 + %45 = OpLabel + %46 = OpLoad %6 %40 + %47 = OpSLessThan %17 %46 %16 + OpBranchConditional %47 %42 %43 + %42 = OpLabel + OpBranch %44 + %44 = OpLabel + %48 = OpLoad %6 %40 + %49 = OpIAdd %6 %48 %28 + OpStore %40 %49 + OpBranch %41 + %43 = OpLabel + OpBranch %35 + %36 = OpLabel + %50 = OpLoad %6 %32 + %51 = OpIAdd %6 %50 %28 + OpStore %32 %51 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_2, context.get()); + + ASSERT_TRUE(ops[3]->PreconditionHolds()); + ops[3]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_3 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 100 + %17 = OpTypeBool + %28 = OpConstant %6 1 + %52 = OpConstantTrue %17 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %19 = OpVariable %7 Function + %32 = OpVariable %7 Function + %40 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %52 %14 %12 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + OpStore %19 %9 + OpBranch %20 + %20 = OpLabel + OpSelectionMerge %22 None + OpBranchConditional %52 %24 %22 + %24 = OpLabel + %25 = OpLoad %6 %19 + %26 = OpSLessThan %17 %25 %16 + OpBranchConditional %26 %21 %22 + %21 = OpLabel + OpBranch %22 + %23 = OpLabel + %27 = OpLoad %6 %19 + %29 = OpIAdd %6 %27 %28 + OpStore %19 %29 + OpBranch %20 + %22 = OpLabel + OpBranch %12 + %13 = OpLabel + %30 = OpLoad %6 %8 + %31 = OpIAdd %6 %30 %28 + OpStore %8 %31 + OpBranch %10 + %12 = OpLabel + OpStore %32 %9 + OpBranch %33 + %33 = OpLabel + OpSelectionMerge %35 None + OpBranchConditional %52 %37 %35 + %37 = OpLabel + %38 = OpLoad %6 %32 + %39 = OpSLessThan %17 %38 %16 + OpBranchConditional %39 %34 %35 + %34 = OpLabel + OpStore %40 %9 + OpBranch %41 + %41 = OpLabel + OpSelectionMerge %43 None + OpBranchConditional %52 %45 %43 + %45 = OpLabel + %46 = OpLoad %6 %40 + %47 = OpSLessThan %17 %46 %16 + OpBranchConditional %47 %42 %43 + %42 = OpLabel + OpBranch %43 + %44 = OpLabel + %48 = OpLoad %6 %40 + %49 = OpIAdd %6 %48 %28 + OpStore %40 %49 + OpBranch %41 + %43 = OpLabel + OpBranch %35 + %36 = OpLabel + %50 = OpLoad %6 %32 + %51 = OpIAdd %6 %50 %28 + OpStore %32 %51 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_3, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, LoopyShader3) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 10 + %16 = OpConstant %6 0 + %17 = OpTypeBool + %20 = OpConstant %6 1 + %23 = OpConstant %6 3 + %40 = OpConstant %6 5 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %14 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSGreaterThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + %19 = OpLoad %6 %8 + %21 = OpISub %6 %19 %20 + OpStore %8 %21 + %22 = OpLoad %6 %8 + %24 = OpSLessThan %17 %22 %23 + OpSelectionMerge %26 None + OpBranchConditional %24 %25 %26 + %25 = OpLabel + OpBranch %13 + %26 = OpLabel + OpBranch %28 + %28 = OpLabel + OpLoopMerge %30 %31 None + OpBranch %29 + %29 = OpLabel + %32 = OpLoad %6 %8 + %33 = OpISub %6 %32 %20 + OpStore %8 %33 + %34 = OpLoad %6 %8 + %35 = OpIEqual %17 %34 %20 + OpSelectionMerge %37 None + OpBranchConditional %35 %36 %37 + %36 = OpLabel + OpReturn ; This return spoils everything: it means the merge does not post-dominate the header. + %37 = OpLabel + OpBranch %31 + %31 = OpLabel + %39 = OpLoad %6 %8 + %41 = OpSGreaterThan %17 %39 %40 + OpBranchConditional %41 %28 %30 + %30 = OpLabel + OpBranch %13 + %13 = OpLabel + OpBranch %10 + %12 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(0, ops.size()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, LoopyShader4) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %8 = OpTypeFunction %6 %7 + %13 = OpConstant %6 0 + %22 = OpTypeBool + %25 = OpConstant %6 1 + %39 = OpConstant %6 100 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %45 = OpVariable %7 Function + %46 = OpVariable %7 Function + %47 = OpVariable %7 Function + %32 = OpVariable %7 Function + %42 = OpVariable %7 Function + OpStore %32 %13 + OpBranch %33 + %33 = OpLabel + OpLoopMerge %35 %36 None + OpBranch %37 + %37 = OpLabel + %38 = OpLoad %6 %32 + %40 = OpSLessThan %22 %38 %39 + OpBranchConditional %40 %34 %35 + %34 = OpLabel + OpBranch %36 + %36 = OpLabel + %41 = OpLoad %6 %32 + OpStore %42 %25 + OpStore %45 %13 + OpStore %46 %13 + OpBranch %48 + %48 = OpLabel + OpLoopMerge %49 %50 None + OpBranch %51 + %51 = OpLabel + %52 = OpLoad %6 %46 + %53 = OpLoad %6 %42 + %54 = OpSLessThan %22 %52 %53 + OpBranchConditional %54 %55 %49 + %55 = OpLabel + %56 = OpLoad %6 %45 + %57 = OpIAdd %6 %56 %25 + OpStore %45 %57 + OpBranch %50 + %50 = OpLabel + %58 = OpLoad %6 %46 + %59 = OpIAdd %6 %58 %25 + OpStore %46 %59 + OpBranch %48 + %49 = OpLabel + %60 = OpLoad %6 %45 + OpStore %47 %60 + %43 = OpLoad %6 %47 + %44 = OpIAdd %6 %41 %43 + OpStore %32 %44 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + // Initially there are two opportunities. + ASSERT_EQ(2, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %8 = OpTypeFunction %6 %7 + %13 = OpConstant %6 0 + %22 = OpTypeBool + %25 = OpConstant %6 1 + %39 = OpConstant %6 100 + %61 = OpConstantTrue %22 + %62 = OpUndef %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %45 = OpVariable %7 Function + %46 = OpVariable %7 Function + %47 = OpVariable %7 Function + %32 = OpVariable %7 Function + %42 = OpVariable %7 Function + OpStore %32 %13 + OpBranch %33 + %33 = OpLabel + OpSelectionMerge %35 None + OpBranchConditional %61 %37 %35 + %37 = OpLabel + %38 = OpLoad %6 %32 + %40 = OpSLessThan %22 %38 %39 + OpBranchConditional %40 %34 %35 + %34 = OpLabel + OpBranch %35 + %36 = OpLabel + %41 = OpLoad %6 %32 + OpStore %42 %25 + OpStore %45 %13 + OpStore %46 %13 + OpBranch %48 + %48 = OpLabel + OpLoopMerge %49 %50 None + OpBranch %51 + %51 = OpLabel + %52 = OpLoad %6 %46 + %53 = OpLoad %6 %42 + %54 = OpSLessThan %22 %52 %53 + OpBranchConditional %54 %55 %49 + %55 = OpLabel + %56 = OpLoad %6 %45 + %57 = OpIAdd %6 %56 %25 + OpStore %45 %57 + OpBranch %50 + %50 = OpLabel + %58 = OpLoad %6 %46 + %59 = OpIAdd %6 %58 %25 + OpStore %46 %59 + OpBranch %48 + %49 = OpLabel + %60 = OpLoad %6 %45 + OpStore %47 %60 + %43 = OpLoad %6 %47 + %44 = OpIAdd %6 %62 %43 + OpStore %32 %44 + OpBranch %33 + %35 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + + // Applying the first opportunity has killed the second opportunity, because + // there was a loop embedded in the continue target of the loop we have just + // eliminated; the continue-embedded loop is now unreachable. + ASSERT_FALSE(ops[1]->PreconditionHolds()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, ConditionalBreak1) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %10 = OpTypeBool + %11 = OpConstantFalse %10 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpLoopMerge %8 %9 None + OpBranch %7 + %7 = OpLabel + OpSelectionMerge %13 None + OpBranchConditional %11 %12 %13 + %12 = OpLabel + OpBranch %8 + %13 = OpLabel + OpBranch %9 + %9 = OpLabel + OpBranchConditional %11 %6 %8 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %10 = OpTypeBool + %11 = OpConstantFalse %10 + %14 = OpConstantTrue %10 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpSelectionMerge %8 None + OpBranchConditional %14 %7 %8 + %7 = OpLabel + OpSelectionMerge %13 None + OpBranchConditional %11 %12 %13 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpBranch %8 + %9 = OpLabel + OpBranchConditional %11 %6 %8 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, ConditionalBreak2) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %10 = OpTypeBool + %11 = OpConstantFalse %10 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpLoopMerge %8 %9 None + OpBranch %7 + %7 = OpLabel + OpSelectionMerge %13 None + OpBranchConditional %11 %8 %13 + %13 = OpLabel + OpBranch %9 + %9 = OpLabel + OpBranchConditional %11 %6 %8 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %10 = OpTypeBool + %11 = OpConstantFalse %10 + %14 = OpConstantTrue %10 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpSelectionMerge %8 None + OpBranchConditional %14 %7 %8 + %7 = OpLabel + OpSelectionMerge %13 None + OpBranchConditional %11 %13 %13 + %13 = OpLabel + OpBranch %8 + %9 = OpLabel + OpBranchConditional %11 %6 %8 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, UnconditionalBreak) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpLoopMerge %8 %9 None + OpBranch %7 + %7 = OpLabel + OpBranch %8 + %9 = OpLabel + OpBranch %6 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %10 = OpTypeBool + %11 = OpConstantTrue %10 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpSelectionMerge %8 None + OpBranchConditional %11 %7 %8 + %7 = OpLabel + OpBranch %8 + %9 = OpLabel + OpBranch %6 + %8 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, Complex) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" %3 + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %4 0 Offset 0 + OpMemberDecorate %4 1 Offset 4 + OpMemberDecorate %4 2 Offset 8 + OpMemberDecorate %4 3 Offset 12 + OpDecorate %4 Block + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %3 Location 0 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpTypeBool + %9 = OpTypePointer Function %8 + %10 = OpTypeInt 32 1 + %4 = OpTypeStruct %10 %10 %10 %10 + %11 = OpTypePointer Uniform %4 + %5 = OpVariable %11 Uniform + %12 = OpConstant %10 0 + %13 = OpTypePointer Uniform %10 + %14 = OpTypeInt 32 0 + %15 = OpConstant %14 0 + %16 = OpConstant %10 1 + %17 = OpConstant %10 2 + %18 = OpConstant %10 3 + %19 = OpTypePointer Function %10 + %20 = OpConstantFalse %8 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 4 + %23 = OpTypePointer Output %22 + %3 = OpVariable %23 Output + %2 = OpFunction %6 None %7 + %24 = OpLabel + %25 = OpVariable %9 Function + %26 = OpVariable %9 Function + %27 = OpVariable %9 Function + %28 = OpVariable %9 Function + %29 = OpVariable %9 Function + %30 = OpVariable %19 Function + %31 = OpAccessChain %13 %5 %12 + %32 = OpLoad %10 %31 + %33 = OpINotEqual %8 %32 %15 + OpStore %25 %33 + %34 = OpAccessChain %13 %5 %16 + %35 = OpLoad %10 %34 + %36 = OpINotEqual %8 %35 %15 + OpStore %26 %36 + %37 = OpAccessChain %13 %5 %17 + %38 = OpLoad %10 %37 + %39 = OpINotEqual %8 %38 %15 + OpStore %27 %39 + %40 = OpAccessChain %13 %5 %18 + %41 = OpLoad %10 %40 + %42 = OpINotEqual %8 %41 %15 + OpStore %28 %42 + %43 = OpLoad %8 %25 + OpStore %29 %43 + OpStore %30 %12 + OpBranch %44 + %44 = OpLabel + OpLoopMerge %45 %46 None + OpBranch %47 + %47 = OpLabel + %48 = OpLoad %8 %29 + OpBranchConditional %48 %49 %45 + %49 = OpLabel + %50 = OpLoad %8 %25 + OpSelectionMerge %51 None + OpBranchConditional %50 %52 %51 + %52 = OpLabel + %53 = OpLoad %8 %26 + OpStore %29 %53 + %54 = OpLoad %10 %30 + %55 = OpIAdd %10 %54 %16 + OpStore %30 %55 + OpBranch %51 + %51 = OpLabel + %56 = OpLoad %8 %26 + OpSelectionMerge %57 None + OpBranchConditional %56 %58 %57 + %58 = OpLabel + %59 = OpLoad %10 %30 + %60 = OpIAdd %10 %59 %16 + OpStore %30 %60 + %61 = OpLoad %8 %29 + %62 = OpLoad %8 %25 + %63 = OpLogicalOr %8 %61 %62 + OpStore %29 %63 + %64 = OpLoad %8 %27 + OpSelectionMerge %65 None + OpBranchConditional %64 %66 %65 + %66 = OpLabel + %67 = OpLoad %10 %30 + %68 = OpIAdd %10 %67 %17 + OpStore %30 %68 + %69 = OpLoad %8 %29 + %70 = OpLogicalNot %8 %69 + OpStore %29 %70 + OpBranch %46 + %65 = OpLabel + %71 = OpLoad %8 %29 + %72 = OpLogicalOr %8 %71 %20 + OpStore %29 %72 + OpBranch %46 + %57 = OpLabel + OpBranch %73 + %73 = OpLabel + OpLoopMerge %74 %75 None + OpBranch %76 + %76 = OpLabel + %77 = OpLoad %8 %28 + OpSelectionMerge %78 None + OpBranchConditional %77 %79 %80 + %79 = OpLabel + %81 = OpLoad %10 %30 + OpSelectionMerge %82 None + OpSwitch %81 %83 1 %84 2 %85 + %83 = OpLabel + OpBranch %82 + %84 = OpLabel + %86 = OpLoad %8 %29 + %87 = OpSelect %10 %86 %16 %17 + %88 = OpLoad %10 %30 + %89 = OpIAdd %10 %88 %87 + OpStore %30 %89 + OpBranch %82 + %85 = OpLabel + OpBranch %75 + %82 = OpLabel + %90 = OpLoad %8 %27 + OpSelectionMerge %91 None + OpBranchConditional %90 %92 %91 + %92 = OpLabel + OpBranch %75 + %91 = OpLabel + OpBranch %78 + %80 = OpLabel + OpBranch %74 + %78 = OpLabel + OpBranch %75 + %75 = OpLabel + %93 = OpLoad %8 %29 + OpBranchConditional %93 %73 %74 + %74 = OpLabel + OpBranch %46 + %46 = OpLabel + OpBranch %44 + %45 = OpLabel + %94 = OpLoad %10 %30 + %95 = OpConvertSToF %21 %94 + %96 = OpCompositeConstruct %22 %95 %95 %95 %95 + OpStore %3 %96 + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(2, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" %3 + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %4 0 Offset 0 + OpMemberDecorate %4 1 Offset 4 + OpMemberDecorate %4 2 Offset 8 + OpMemberDecorate %4 3 Offset 12 + OpDecorate %4 Block + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %3 Location 0 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpTypeBool + %9 = OpTypePointer Function %8 + %10 = OpTypeInt 32 1 + %4 = OpTypeStruct %10 %10 %10 %10 + %11 = OpTypePointer Uniform %4 + %5 = OpVariable %11 Uniform + %12 = OpConstant %10 0 + %13 = OpTypePointer Uniform %10 + %14 = OpTypeInt 32 0 + %15 = OpConstant %14 0 + %16 = OpConstant %10 1 + %17 = OpConstant %10 2 + %18 = OpConstant %10 3 + %19 = OpTypePointer Function %10 + %20 = OpConstantFalse %8 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 4 + %23 = OpTypePointer Output %22 + %3 = OpVariable %23 Output + %97 = OpConstantTrue %8 + %2 = OpFunction %6 None %7 + %24 = OpLabel + %25 = OpVariable %9 Function + %26 = OpVariable %9 Function + %27 = OpVariable %9 Function + %28 = OpVariable %9 Function + %29 = OpVariable %9 Function + %30 = OpVariable %19 Function + %31 = OpAccessChain %13 %5 %12 + %32 = OpLoad %10 %31 + %33 = OpINotEqual %8 %32 %15 + OpStore %25 %33 + %34 = OpAccessChain %13 %5 %16 + %35 = OpLoad %10 %34 + %36 = OpINotEqual %8 %35 %15 + OpStore %26 %36 + %37 = OpAccessChain %13 %5 %17 + %38 = OpLoad %10 %37 + %39 = OpINotEqual %8 %38 %15 + OpStore %27 %39 + %40 = OpAccessChain %13 %5 %18 + %41 = OpLoad %10 %40 + %42 = OpINotEqual %8 %41 %15 + OpStore %28 %42 + %43 = OpLoad %8 %25 + OpStore %29 %43 + OpStore %30 %12 + OpBranch %44 + %44 = OpLabel + OpSelectionMerge %45 None ; Was OpLoopMerge %45 %46 None + OpBranchConditional %97 %47 %45 ; Was OpBranch %47 + %47 = OpLabel + %48 = OpLoad %8 %29 + OpBranchConditional %48 %49 %45 + %49 = OpLabel + %50 = OpLoad %8 %25 + OpSelectionMerge %51 None + OpBranchConditional %50 %52 %51 + %52 = OpLabel + %53 = OpLoad %8 %26 + OpStore %29 %53 + %54 = OpLoad %10 %30 + %55 = OpIAdd %10 %54 %16 + OpStore %30 %55 + OpBranch %51 + %51 = OpLabel + %56 = OpLoad %8 %26 + OpSelectionMerge %57 None + OpBranchConditional %56 %58 %57 + %58 = OpLabel + %59 = OpLoad %10 %30 + %60 = OpIAdd %10 %59 %16 + OpStore %30 %60 + %61 = OpLoad %8 %29 + %62 = OpLoad %8 %25 + %63 = OpLogicalOr %8 %61 %62 + OpStore %29 %63 + %64 = OpLoad %8 %27 + OpSelectionMerge %65 None + OpBranchConditional %64 %66 %65 + %66 = OpLabel + %67 = OpLoad %10 %30 + %68 = OpIAdd %10 %67 %17 + OpStore %30 %68 + %69 = OpLoad %8 %29 + %70 = OpLogicalNot %8 %69 + OpStore %29 %70 + OpBranch %65 ; Was OpBranch %46 + %65 = OpLabel + %71 = OpLoad %8 %29 + %72 = OpLogicalOr %8 %71 %20 + OpStore %29 %72 + OpBranch %57 ; Was OpBranch %46 + %57 = OpLabel + OpBranch %73 + %73 = OpLabel + OpLoopMerge %74 %75 None + OpBranch %76 + %76 = OpLabel + %77 = OpLoad %8 %28 + OpSelectionMerge %78 None + OpBranchConditional %77 %79 %80 + %79 = OpLabel + %81 = OpLoad %10 %30 + OpSelectionMerge %82 None + OpSwitch %81 %83 1 %84 2 %85 + %83 = OpLabel + OpBranch %82 + %84 = OpLabel + %86 = OpLoad %8 %29 + %87 = OpSelect %10 %86 %16 %17 + %88 = OpLoad %10 %30 + %89 = OpIAdd %10 %88 %87 + OpStore %30 %89 + OpBranch %82 + %85 = OpLabel + OpBranch %75 + %82 = OpLabel + %90 = OpLoad %8 %27 + OpSelectionMerge %91 None + OpBranchConditional %90 %92 %91 + %92 = OpLabel + OpBranch %75 + %91 = OpLabel + OpBranch %78 + %80 = OpLabel + OpBranch %74 + %78 = OpLabel + OpBranch %75 + %75 = OpLabel + %93 = OpLoad %8 %29 + OpBranchConditional %93 %73 %74 + %74 = OpLabel + OpBranch %45 ; Was OpBranch %46 + %46 = OpLabel + OpBranch %44 + %45 = OpLabel + %94 = OpLoad %10 %30 + %95 = OpConvertSToF %21 %94 + %96 = OpCompositeConstruct %22 %95 %95 %95 %95 + OpStore %3 %96 + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + CheckValid(env, context.get()); + + std::string after_op_1 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" %3 + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %4 0 Offset 0 + OpMemberDecorate %4 1 Offset 4 + OpMemberDecorate %4 2 Offset 8 + OpMemberDecorate %4 3 Offset 12 + OpDecorate %4 Block + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %3 Location 0 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpTypeBool + %9 = OpTypePointer Function %8 + %10 = OpTypeInt 32 1 + %4 = OpTypeStruct %10 %10 %10 %10 + %11 = OpTypePointer Uniform %4 + %5 = OpVariable %11 Uniform + %12 = OpConstant %10 0 + %13 = OpTypePointer Uniform %10 + %14 = OpTypeInt 32 0 + %15 = OpConstant %14 0 + %16 = OpConstant %10 1 + %17 = OpConstant %10 2 + %18 = OpConstant %10 3 + %19 = OpTypePointer Function %10 + %20 = OpConstantFalse %8 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 4 + %23 = OpTypePointer Output %22 + %3 = OpVariable %23 Output + %97 = OpConstantTrue %8 + %2 = OpFunction %6 None %7 + %24 = OpLabel + %25 = OpVariable %9 Function + %26 = OpVariable %9 Function + %27 = OpVariable %9 Function + %28 = OpVariable %9 Function + %29 = OpVariable %9 Function + %30 = OpVariable %19 Function + %31 = OpAccessChain %13 %5 %12 + %32 = OpLoad %10 %31 + %33 = OpINotEqual %8 %32 %15 + OpStore %25 %33 + %34 = OpAccessChain %13 %5 %16 + %35 = OpLoad %10 %34 + %36 = OpINotEqual %8 %35 %15 + OpStore %26 %36 + %37 = OpAccessChain %13 %5 %17 + %38 = OpLoad %10 %37 + %39 = OpINotEqual %8 %38 %15 + OpStore %27 %39 + %40 = OpAccessChain %13 %5 %18 + %41 = OpLoad %10 %40 + %42 = OpINotEqual %8 %41 %15 + OpStore %28 %42 + %43 = OpLoad %8 %25 + OpStore %29 %43 + OpStore %30 %12 + OpBranch %44 + %44 = OpLabel + OpSelectionMerge %45 None ; Was OpLoopMerge %45 %46 None + OpBranchConditional %97 %47 %45 ; Was OpBranch %47 + %47 = OpLabel + %48 = OpLoad %8 %29 + OpBranchConditional %48 %49 %45 + %49 = OpLabel + %50 = OpLoad %8 %25 + OpSelectionMerge %51 None + OpBranchConditional %50 %52 %51 + %52 = OpLabel + %53 = OpLoad %8 %26 + OpStore %29 %53 + %54 = OpLoad %10 %30 + %55 = OpIAdd %10 %54 %16 + OpStore %30 %55 + OpBranch %51 + %51 = OpLabel + %56 = OpLoad %8 %26 + OpSelectionMerge %57 None + OpBranchConditional %56 %58 %57 + %58 = OpLabel + %59 = OpLoad %10 %30 + %60 = OpIAdd %10 %59 %16 + OpStore %30 %60 + %61 = OpLoad %8 %29 + %62 = OpLoad %8 %25 + %63 = OpLogicalOr %8 %61 %62 + OpStore %29 %63 + %64 = OpLoad %8 %27 + OpSelectionMerge %65 None + OpBranchConditional %64 %66 %65 + %66 = OpLabel + %67 = OpLoad %10 %30 + %68 = OpIAdd %10 %67 %17 + OpStore %30 %68 + %69 = OpLoad %8 %29 + %70 = OpLogicalNot %8 %69 + OpStore %29 %70 + OpBranch %65 ; Was OpBranch %46 + %65 = OpLabel + %71 = OpLoad %8 %29 + %72 = OpLogicalOr %8 %71 %20 + OpStore %29 %72 + OpBranch %57 ; Was OpBranch %46 + %57 = OpLabel + OpBranch %73 + %73 = OpLabel + OpSelectionMerge %74 None ; Was OpLoopMerge %74 %75 None + OpBranchConditional %97 %76 %74 ; Was OpBranch %76 + %76 = OpLabel + %77 = OpLoad %8 %28 + OpSelectionMerge %78 None + OpBranchConditional %77 %79 %80 + %79 = OpLabel + %81 = OpLoad %10 %30 + OpSelectionMerge %82 None + OpSwitch %81 %83 1 %84 2 %85 + %83 = OpLabel + OpBranch %82 + %84 = OpLabel + %86 = OpLoad %8 %29 + %87 = OpSelect %10 %86 %16 %17 + %88 = OpLoad %10 %30 + %89 = OpIAdd %10 %88 %87 + OpStore %30 %89 + OpBranch %82 + %85 = OpLabel + OpBranch %82 + %82 = OpLabel + %90 = OpLoad %8 %27 + OpSelectionMerge %91 None + OpBranchConditional %90 %92 %91 + %92 = OpLabel + OpBranch %91 + %91 = OpLabel + OpBranch %78 + %80 = OpLabel + OpBranch %78 ; Was OpBranch %74 + %78 = OpLabel + OpBranch %74 + %75 = OpLabel + %93 = OpLoad %8 %29 + OpBranchConditional %93 %73 %74 + %74 = OpLabel + OpBranch %45 ; Was OpBranch %46 + %46 = OpLabel + OpBranch %44 + %45 = OpLabel + %94 = OpLoad %10 %30 + %95 = OpConvertSToF %21 %94 + %96 = OpCompositeConstruct %22 %95 %95 %95 %95 + OpStore %3 %96 + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_1, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, ComplexOptimized) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" %3 + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %4 0 Offset 0 + OpMemberDecorate %4 1 Offset 4 + OpMemberDecorate %4 2 Offset 8 + OpMemberDecorate %4 3 Offset 12 + OpDecorate %4 Block + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %3 Location 0 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpTypeBool + %10 = OpTypeInt 32 1 + %4 = OpTypeStruct %10 %10 %10 %10 + %11 = OpTypePointer Uniform %4 + %5 = OpVariable %11 Uniform + %12 = OpConstant %10 0 + %13 = OpTypePointer Uniform %10 + %14 = OpTypeInt 32 0 + %15 = OpConstant %14 0 + %16 = OpConstant %10 1 + %17 = OpConstant %10 2 + %18 = OpConstant %10 3 + %20 = OpConstantFalse %8 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 4 + %23 = OpTypePointer Output %22 + %3 = OpVariable %23 Output + %2 = OpFunction %6 None %7 + %24 = OpLabel + %31 = OpAccessChain %13 %5 %12 + %32 = OpLoad %10 %31 + %33 = OpINotEqual %8 %32 %15 + %34 = OpAccessChain %13 %5 %16 + %35 = OpLoad %10 %34 + %36 = OpINotEqual %8 %35 %15 + %37 = OpAccessChain %13 %5 %17 + %38 = OpLoad %10 %37 + %39 = OpINotEqual %8 %38 %15 + %40 = OpAccessChain %13 %5 %18 + %41 = OpLoad %10 %40 + %42 = OpINotEqual %8 %41 %15 + OpBranch %44 + %44 = OpLabel + %98 = OpPhi %10 %12 %24 %107 %46 + %97 = OpPhi %8 %33 %24 %105 %46 + OpLoopMerge %45 %46 None + OpBranchConditional %97 %49 %45 + %49 = OpLabel + OpSelectionMerge %51 None + OpBranchConditional %33 %52 %51 + %52 = OpLabel + %55 = OpIAdd %10 %98 %16 + OpBranch %51 + %51 = OpLabel + %100 = OpPhi %10 %98 %49 %55 %52 + %113 = OpSelect %8 %33 %36 %97 + OpSelectionMerge %57 None + OpBranchConditional %36 %58 %57 + %58 = OpLabel + %60 = OpIAdd %10 %100 %16 + %63 = OpLogicalOr %8 %113 %33 + OpSelectionMerge %65 None + OpBranchConditional %39 %66 %65 + %66 = OpLabel + %68 = OpIAdd %10 %100 %18 + %70 = OpLogicalNot %8 %63 + OpBranch %46 + %65 = OpLabel + %72 = OpLogicalOr %8 %63 %20 + OpBranch %46 + %57 = OpLabel + OpBranch %73 + %73 = OpLabel + %99 = OpPhi %10 %100 %57 %109 %75 + OpLoopMerge %74 %75 None + OpBranch %76 + %76 = OpLabel + OpSelectionMerge %78 None + OpBranchConditional %42 %79 %80 + %79 = OpLabel + OpSelectionMerge %82 None + OpSwitch %99 %83 1 %84 2 %85 + %83 = OpLabel + OpBranch %82 + %84 = OpLabel + %87 = OpSelect %10 %113 %16 %17 + %89 = OpIAdd %10 %99 %87 + OpBranch %82 + %85 = OpLabel + OpBranch %75 + %82 = OpLabel + %110 = OpPhi %10 %99 %83 %89 %84 + OpSelectionMerge %91 None + OpBranchConditional %39 %92 %91 + %92 = OpLabel + OpBranch %75 + %91 = OpLabel + OpBranch %78 + %80 = OpLabel + OpBranch %74 + %78 = OpLabel + OpBranch %75 + %75 = OpLabel + %109 = OpPhi %10 %99 %85 %110 %92 %110 %78 + OpBranchConditional %113 %73 %74 + %74 = OpLabel + %108 = OpPhi %10 %99 %80 %109 %75 + OpBranch %46 + %46 = OpLabel + %107 = OpPhi %10 %68 %66 %60 %65 %108 %74 + %105 = OpPhi %8 %70 %66 %72 %65 %113 %74 + OpBranch %44 + %45 = OpLabel + %95 = OpConvertSToF %21 %98 + %96 = OpCompositeConstruct %22 %95 %95 %95 %95 + OpStore %3 %96 + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(2, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" %3 + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %4 0 Offset 0 + OpMemberDecorate %4 1 Offset 4 + OpMemberDecorate %4 2 Offset 8 + OpMemberDecorate %4 3 Offset 12 + OpDecorate %4 Block + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %3 Location 0 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpTypeBool + %10 = OpTypeInt 32 1 + %4 = OpTypeStruct %10 %10 %10 %10 + %11 = OpTypePointer Uniform %4 + %5 = OpVariable %11 Uniform + %12 = OpConstant %10 0 + %13 = OpTypePointer Uniform %10 + %14 = OpTypeInt 32 0 + %15 = OpConstant %14 0 + %16 = OpConstant %10 1 + %17 = OpConstant %10 2 + %18 = OpConstant %10 3 + %20 = OpConstantFalse %8 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 4 + %23 = OpTypePointer Output %22 + %3 = OpVariable %23 Output + %114 = OpUndef %10 + %115 = OpUndef %8 + %2 = OpFunction %6 None %7 + %24 = OpLabel + %31 = OpAccessChain %13 %5 %12 + %32 = OpLoad %10 %31 + %33 = OpINotEqual %8 %32 %15 + %34 = OpAccessChain %13 %5 %16 + %35 = OpLoad %10 %34 + %36 = OpINotEqual %8 %35 %15 + %37 = OpAccessChain %13 %5 %17 + %38 = OpLoad %10 %37 + %39 = OpINotEqual %8 %38 %15 + %40 = OpAccessChain %13 %5 %18 + %41 = OpLoad %10 %40 + %42 = OpINotEqual %8 %41 %15 + OpBranch %44 + %44 = OpLabel + %98 = OpPhi %10 %12 %24 %114 %46 + %97 = OpPhi %8 %33 %24 %115 %46 + OpSelectionMerge %45 None ; Was OpLoopMerge %45 %46 None + OpBranchConditional %97 %49 %45 + %49 = OpLabel + OpSelectionMerge %51 None + OpBranchConditional %33 %52 %51 + %52 = OpLabel + %55 = OpIAdd %10 %98 %16 + OpBranch %51 + %51 = OpLabel + %100 = OpPhi %10 %98 %49 %55 %52 + %113 = OpSelect %8 %33 %36 %97 + OpSelectionMerge %57 None + OpBranchConditional %36 %58 %57 + %58 = OpLabel + %60 = OpIAdd %10 %100 %16 + %63 = OpLogicalOr %8 %113 %33 + OpSelectionMerge %65 None + OpBranchConditional %39 %66 %65 + %66 = OpLabel + %68 = OpIAdd %10 %100 %18 + %70 = OpLogicalNot %8 %63 + OpBranch %65 ; Was OpBranch %46 + %65 = OpLabel + %72 = OpLogicalOr %8 %63 %20 + OpBranch %57 ; Was OpBranch %46 + %57 = OpLabel + OpBranch %73 + %73 = OpLabel + %99 = OpPhi %10 %100 %57 %109 %75 + OpLoopMerge %74 %75 None + OpBranch %76 + %76 = OpLabel + OpSelectionMerge %78 None + OpBranchConditional %42 %79 %80 + %79 = OpLabel + OpSelectionMerge %82 None + OpSwitch %99 %83 1 %84 2 %85 + %83 = OpLabel + OpBranch %82 + %84 = OpLabel + %87 = OpSelect %10 %113 %16 %17 + %89 = OpIAdd %10 %99 %87 + OpBranch %82 + %85 = OpLabel + OpBranch %75 + %82 = OpLabel + %110 = OpPhi %10 %99 %83 %89 %84 + OpSelectionMerge %91 None + OpBranchConditional %39 %92 %91 + %92 = OpLabel + OpBranch %75 + %91 = OpLabel + OpBranch %78 + %80 = OpLabel + OpBranch %74 + %78 = OpLabel + OpBranch %75 + %75 = OpLabel + %109 = OpPhi %10 %99 %85 %110 %92 %110 %78 + OpBranchConditional %113 %73 %74 + %74 = OpLabel + %108 = OpPhi %10 %99 %80 %109 %75 + OpBranch %45 ; Was OpBranch %46 + %46 = OpLabel + %107 = OpPhi %10 ; Was OpPhi %10 %68 %66 %60 %65 %108 %74 + %105 = OpPhi %8 ; Was OpPhi %8 %70 %66 %72 %65 %113 %74 + OpBranch %44 + %45 = OpLabel + %95 = OpConvertSToF %21 %98 + %96 = OpCompositeConstruct %22 %95 %95 %95 %95 + OpStore %3 %96 + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + CheckValid(env, context.get()); + std::string after_op_1 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" %3 + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %4 0 Offset 0 + OpMemberDecorate %4 1 Offset 4 + OpMemberDecorate %4 2 Offset 8 + OpMemberDecorate %4 3 Offset 12 + OpDecorate %4 Block + OpDecorate %5 DescriptorSet 0 + OpDecorate %5 Binding 0 + OpDecorate %3 Location 0 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpTypeBool + %10 = OpTypeInt 32 1 + %4 = OpTypeStruct %10 %10 %10 %10 + %11 = OpTypePointer Uniform %4 + %5 = OpVariable %11 Uniform + %12 = OpConstant %10 0 + %13 = OpTypePointer Uniform %10 + %14 = OpTypeInt 32 0 + %15 = OpConstant %14 0 + %16 = OpConstant %10 1 + %17 = OpConstant %10 2 + %18 = OpConstant %10 3 + %20 = OpConstantFalse %8 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 4 + %23 = OpTypePointer Output %22 + %3 = OpVariable %23 Output + %114 = OpUndef %10 + %115 = OpUndef %8 + %116 = OpConstantTrue %8 + %2 = OpFunction %6 None %7 + %24 = OpLabel + %31 = OpAccessChain %13 %5 %12 + %32 = OpLoad %10 %31 + %33 = OpINotEqual %8 %32 %15 + %34 = OpAccessChain %13 %5 %16 + %35 = OpLoad %10 %34 + %36 = OpINotEqual %8 %35 %15 + %37 = OpAccessChain %13 %5 %17 + %38 = OpLoad %10 %37 + %39 = OpINotEqual %8 %38 %15 + %40 = OpAccessChain %13 %5 %18 + %41 = OpLoad %10 %40 + %42 = OpINotEqual %8 %41 %15 + OpBranch %44 + %44 = OpLabel + %98 = OpPhi %10 %12 %24 %114 %46 + %97 = OpPhi %8 %33 %24 %115 %46 + OpSelectionMerge %45 None ; Was OpLoopMerge %45 %46 None + OpBranchConditional %97 %49 %45 + %49 = OpLabel + OpSelectionMerge %51 None + OpBranchConditional %33 %52 %51 + %52 = OpLabel + %55 = OpIAdd %10 %98 %16 + OpBranch %51 + %51 = OpLabel + %100 = OpPhi %10 %98 %49 %55 %52 + %113 = OpSelect %8 %33 %36 %97 + OpSelectionMerge %57 None + OpBranchConditional %36 %58 %57 + %58 = OpLabel + %60 = OpIAdd %10 %100 %16 + %63 = OpLogicalOr %8 %113 %33 + OpSelectionMerge %65 None + OpBranchConditional %39 %66 %65 + %66 = OpLabel + %68 = OpIAdd %10 %100 %18 + %70 = OpLogicalNot %8 %63 + OpBranch %65 ; Was OpBranch %46 + %65 = OpLabel + %72 = OpLogicalOr %8 %63 %20 + OpBranch %57 ; Was OpBranch %46 + %57 = OpLabel + OpBranch %73 + %73 = OpLabel + %99 = OpPhi %10 %100 %57 %114 %75 + OpSelectionMerge %74 None ; Was OpLoopMerge %74 %75 None + OpBranchConditional %116 %76 %74 + %76 = OpLabel + OpSelectionMerge %78 None + OpBranchConditional %42 %79 %80 + %79 = OpLabel + OpSelectionMerge %82 None + OpSwitch %99 %83 1 %84 2 %85 + %83 = OpLabel + OpBranch %82 + %84 = OpLabel + %87 = OpSelect %10 %113 %16 %17 + %89 = OpIAdd %10 %99 %87 + OpBranch %82 + %85 = OpLabel + OpBranch %82 ; Was OpBranch %75 + %82 = OpLabel + %110 = OpPhi %10 %99 %83 %89 %84 %114 %85 ; Was OpPhi %10 %99 %83 %89 %84 + OpSelectionMerge %91 None + OpBranchConditional %39 %92 %91 + %92 = OpLabel + OpBranch %91 ; OpBranch %75 + %91 = OpLabel + OpBranch %78 + %80 = OpLabel + OpBranch %78 ; Was OpBranch %74 + %78 = OpLabel + OpBranch %74 ; Was OpBranch %75 + %75 = OpLabel + %109 = OpPhi %10 ; Was OpPhi %10 %99 %85 %110 %92 %110 %78 + OpBranchConditional %115 %73 %74 + %74 = OpLabel + %108 = OpPhi %10 %114 %75 %114 %78 %114 %73 ; Was OpPhi %10 %99 %80 %109 %75 + OpBranch %45 ; Was OpBranch %46 + %46 = OpLabel + %107 = OpPhi %10 ; Was OpPhi %10 %68 %66 %60 %65 %108 %74 + %105 = OpPhi %8 ; Was OpPhi %8 %70 %66 %72 %65 %113 %74 + OpBranch %44 + %45 = OpLabel + %95 = OpConvertSToF %21 %98 + %96 = OpCompositeConstruct %22 %95 %95 %95 %95 + OpStore %3 %96 + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_1, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, DominanceIssue) { + // Exposes a scenario where redirecting edges results in uses of ids being + // non-dominated. We replace such uses with OpUndef to account for this. + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %5 = OpTypeInt 32 1 + %7 = OpTypePointer Function %5 + %6 = OpTypeBool + %8 = OpConstantTrue %6 + %9 = OpConstant %5 10 + %10 = OpConstant %5 20 + %11 = OpConstant %5 30 + %4 = OpFunction %2 None %3 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpLoopMerge %14 %15 None + OpBranch %16 + %16 = OpLabel + OpSelectionMerge %17 None + OpBranchConditional %8 %18 %19 + %18 = OpLabel + OpBranch %14 + %19 = OpLabel + %20 = OpIAdd %5 %9 %10 + OpBranch %17 + %17 = OpLabel + %21 = OpIAdd %5 %20 %11 + OpBranchConditional %8 %14 %15 + %15 = OpLabel + OpBranch %13 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %5 = OpTypeInt 32 1 + %7 = OpTypePointer Function %5 + %6 = OpTypeBool + %8 = OpConstantTrue %6 + %9 = OpConstant %5 10 + %10 = OpConstant %5 20 + %11 = OpConstant %5 30 + %22 = OpUndef %5 + %4 = OpFunction %2 None %3 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %8 %16 %14 + %16 = OpLabel + OpSelectionMerge %17 None + OpBranchConditional %8 %18 %19 + %18 = OpLabel + OpBranch %17 + %19 = OpLabel + %20 = OpIAdd %5 %9 %10 + OpBranch %17 + %17 = OpLabel + %21 = OpIAdd %5 %22 %11 + OpBranchConditional %8 %14 %14 + %15 = OpLabel + OpBranch %13 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, AccessChainIssue) { + // Exposes a scenario where redirecting edges results in a use of an id + // generated by an access chain being non-dominated. + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %56 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %28 0 Offset 0 + OpDecorate %28 Block + OpDecorate %30 DescriptorSet 0 + OpDecorate %30 Binding 0 + OpDecorate %56 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 2 + %8 = OpTypePointer Function %7 + %60 = OpTypePointer Private %7 + %10 = OpConstant %6 0 + %11 = OpConstantComposite %7 %10 %10 + %12 = OpTypePointer Function %6 + %59 = OpTypePointer Private %6 + %14 = OpTypeInt 32 1 + %15 = OpTypePointer Function %14 + %17 = OpConstant %14 0 + %24 = OpConstant %14 100 + %25 = OpTypeBool + %28 = OpTypeStruct %6 + %29 = OpTypePointer Uniform %28 + %30 = OpVariable %29 Uniform + %31 = OpTypePointer Uniform %6 + %39 = OpTypeInt 32 0 + %40 = OpConstant %39 1 + %45 = OpConstant %39 0 + %52 = OpConstant %14 1 + %54 = OpTypeVector %6 4 + %55 = OpTypePointer Output %54 + %56 = OpVariable %55 Output + %9 = OpVariable %60 Private + %4 = OpFunction %2 None %3 + %5 = OpLabel + %13 = OpVariable %12 Function + %16 = OpVariable %15 Function + %38 = OpVariable %12 Function + OpStore %9 %11 + OpStore %13 %10 + OpStore %16 %17 + OpBranch %18 + %18 = OpLabel + OpLoopMerge %20 %21 None + OpBranch %22 + %22 = OpLabel + %23 = OpLoad %14 %16 + %26 = OpSLessThan %25 %23 %24 + OpBranchConditional %26 %19 %20 + %19 = OpLabel + %27 = OpLoad %14 %16 + %32 = OpAccessChain %31 %30 %17 + %33 = OpLoad %6 %32 + %34 = OpConvertFToS %14 %33 + %35 = OpSLessThan %25 %27 %34 + OpSelectionMerge %37 None + OpBranchConditional %35 %36 %44 + %36 = OpLabel + %41 = OpAccessChain %59 %9 %40 + %42 = OpLoad %6 %41 + OpStore %38 %42 + OpBranch %20 + %44 = OpLabel + %46 = OpAccessChain %59 %9 %45 + OpBranch %37 + %37 = OpLabel + %47 = OpLoad %6 %46 + OpStore %38 %47 + %48 = OpLoad %6 %38 + %49 = OpLoad %6 %13 + %50 = OpFAdd %6 %49 %48 + OpStore %13 %50 + OpBranch %21 + %21 = OpLabel + %51 = OpLoad %14 %16 + %53 = OpIAdd %14 %51 %52 + OpStore %16 %53 + OpBranch %18 + %20 = OpLabel + %57 = OpLoad %6 %13 + %58 = OpCompositeConstruct %54 %57 %57 %57 %57 + OpStore %56 %58 + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %56 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpMemberDecorate %28 0 Offset 0 + OpDecorate %28 Block + OpDecorate %30 DescriptorSet 0 + OpDecorate %30 Binding 0 + OpDecorate %56 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 2 + %8 = OpTypePointer Function %7 + %60 = OpTypePointer Private %7 + %10 = OpConstant %6 0 + %11 = OpConstantComposite %7 %10 %10 + %12 = OpTypePointer Function %6 + %59 = OpTypePointer Private %6 + %14 = OpTypeInt 32 1 + %15 = OpTypePointer Function %14 + %17 = OpConstant %14 0 + %24 = OpConstant %14 100 + %25 = OpTypeBool + %28 = OpTypeStruct %6 + %29 = OpTypePointer Uniform %28 + %30 = OpVariable %29 Uniform + %31 = OpTypePointer Uniform %6 + %39 = OpTypeInt 32 0 + %40 = OpConstant %39 1 + %45 = OpConstant %39 0 + %52 = OpConstant %14 1 + %54 = OpTypeVector %6 4 + %55 = OpTypePointer Output %54 + %56 = OpVariable %55 Output + %9 = OpVariable %60 Private + %61 = OpConstantTrue %25 + %62 = OpVariable %59 Private + %4 = OpFunction %2 None %3 + %5 = OpLabel + %13 = OpVariable %12 Function + %16 = OpVariable %15 Function + %38 = OpVariable %12 Function + OpStore %9 %11 + OpStore %13 %10 + OpStore %16 %17 + OpBranch %18 + %18 = OpLabel + OpSelectionMerge %20 None + OpBranchConditional %61 %22 %20 + %22 = OpLabel + %23 = OpLoad %14 %16 + %26 = OpSLessThan %25 %23 %24 + OpBranchConditional %26 %19 %20 + %19 = OpLabel + %27 = OpLoad %14 %16 + %32 = OpAccessChain %31 %30 %17 + %33 = OpLoad %6 %32 + %34 = OpConvertFToS %14 %33 + %35 = OpSLessThan %25 %27 %34 + OpSelectionMerge %37 None + OpBranchConditional %35 %36 %44 + %36 = OpLabel + %41 = OpAccessChain %59 %9 %40 + %42 = OpLoad %6 %41 + OpStore %38 %42 + OpBranch %37 + %44 = OpLabel + %46 = OpAccessChain %59 %9 %45 + OpBranch %37 + %37 = OpLabel + %47 = OpLoad %6 %62 + OpStore %38 %47 + %48 = OpLoad %6 %38 + %49 = OpLoad %6 %13 + %50 = OpFAdd %6 %49 %48 + OpStore %13 %50 + OpBranch %20 + %21 = OpLabel + %51 = OpLoad %14 %16 + %53 = OpIAdd %14 %51 %52 + OpStore %16 %53 + OpBranch %18 + %20 = OpLabel + %57 = OpLoad %6 %13 + %58 = OpCompositeConstruct %54 %57 %57 %57 %57 + OpStore %56 %58 + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, DominanceAndPhiIssue) { + // Exposes an interesting scenario where a use in a phi stops being dominated + // by the block with which it is associated in the phi. + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %17 = OpTypeBool + %18 = OpConstantTrue %17 + %19 = OpConstantFalse %17 + %20 = OpTypeInt 32 1 + %21 = OpConstant %20 5 + %22 = OpConstant %20 6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpLoopMerge %16 %15 None + OpBranch %7 + %7 = OpLabel + OpSelectionMerge %13 None + OpBranchConditional %18 %8 %9 + %8 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %18 %10 %11 + %9 = OpLabel + OpBranch %16 + %10 = OpLabel + OpBranch %16 + %11 = OpLabel + %23 = OpIAdd %20 %21 %22 + OpBranch %12 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpBranch %14 + %14 = OpLabel + %24 = OpPhi %20 %23 %13 + OpBranchConditional %19 %15 %16 + %15 = OpLabel + OpBranch %6 + %16 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %17 = OpTypeBool + %18 = OpConstantTrue %17 + %19 = OpConstantFalse %17 + %20 = OpTypeInt 32 1 + %21 = OpConstant %20 5 + %22 = OpConstant %20 6 + %25 = OpUndef %20 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %6 + %6 = OpLabel + OpSelectionMerge %16 None + OpBranchConditional %18 %7 %16 + %7 = OpLabel + OpSelectionMerge %13 None + OpBranchConditional %18 %8 %9 + %8 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %18 %10 %11 + %9 = OpLabel + OpBranch %13 + %10 = OpLabel + OpBranch %12 + %11 = OpLabel + %23 = OpIAdd %20 %21 %22 + OpBranch %12 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpBranch %14 + %14 = OpLabel + %24 = OpPhi %20 %25 %13 + OpBranchConditional %19 %16 %16 + %15 = OpLabel + OpBranch %6 + %16 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, OpLineBeforeOpPhi) { + // Test to ensure the pass knows OpLine and OpPhi instructions can be + // interleaved. + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpString "somefile" + %4 = OpTypeVoid + %5 = OpTypeFunction %4 + %6 = OpTypeInt 32 1 + %7 = OpConstant %6 10 + %8 = OpConstant %6 20 + %9 = OpConstant %6 30 + %10 = OpTypeBool + %11 = OpConstantTrue %10 + %2 = OpFunction %4 None %5 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpLoopMerge %14 %15 None + OpBranch %16 + %16 = OpLabel + OpSelectionMerge %17 None + OpBranchConditional %11 %18 %19 + %18 = OpLabel + %20 = OpIAdd %6 %7 %8 + %21 = OpIAdd %6 %7 %9 + OpBranch %17 + %19 = OpLabel + OpBranch %14 + %17 = OpLabel + %22 = OpPhi %6 %20 %18 + OpLine %3 0 0 + %23 = OpPhi %6 %21 %18 + OpBranch %15 + %15 = OpLabel + OpBranch %13 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + ASSERT_EQ(1, ops.size()); + + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpString "somefile" + %4 = OpTypeVoid + %5 = OpTypeFunction %4 + %6 = OpTypeInt 32 1 + %7 = OpConstant %6 10 + %8 = OpConstant %6 20 + %9 = OpConstant %6 30 + %10 = OpTypeBool + %11 = OpConstantTrue %10 + %24 = OpUndef %6 + %2 = OpFunction %4 None %5 + %12 = OpLabel + OpBranch %13 + %13 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %11 %16 %14 + %16 = OpLabel + OpSelectionMerge %17 None + OpBranchConditional %11 %18 %19 + %18 = OpLabel + %20 = OpIAdd %6 %7 %8 + %21 = OpIAdd %6 %7 %9 + OpBranch %17 + %19 = OpLabel + OpBranch %17 + %17 = OpLabel + %22 = OpPhi %6 %20 %18 %24 %19 + OpLine %3 0 0 + %23 = OpPhi %6 %21 %18 %24 %19 + OpBranch %14 + %15 = OpLabel + OpBranch %13 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + SelectionMergeIsContinueTarget) { + // Example where a loop's continue target is also the target of a selection. + // In this scenario we cautiously do not apply the transformation. + std::string shader = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %4 = OpTypeFunction %2 + %1 = OpFunction %2 None %4 + %5 = OpLabel + %6 = OpUndef %3 + OpBranch %7 + %7 = OpLabel + %8 = OpPhi %3 %6 %5 %9 %10 + OpLoopMerge %11 %10 None + OpBranch %12 + %12 = OpLabel + %13 = OpUndef %3 + OpSelectionMerge %10 None + OpBranchConditional %13 %14 %10 + %14 = OpLabel + OpBranch %10 + %10 = OpLabel + %9 = OpUndef %3 + OpBranchConditional %9 %7 %11 + %11 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + // There should be no opportunities. + ASSERT_EQ(0, ops.size()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + SwitchSelectionMergeIsContinueTarget) { + // Another example where a loop's continue target is also the target of a + // selection; this time a selection associated with an OpSwitch. We + // cautiously do not apply the transformation. + std::string shader = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %5 = OpTypeInt 32 1 + %4 = OpTypeFunction %2 + %6 = OpConstant %5 2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpLoopMerge %14 %15 None + OpBranchConditional %7 %10 %14 + %10 = OpLabel + OpSelectionMerge %15 None + OpSwitch %6 %12 1 %11 2 %11 3 %15 + %11 = OpLabel + OpBranch %12 + %12 = OpLabel + OpBranch %15 + %15 = OpLabel + OpBranch %9 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + // There should be no opportunities. + ASSERT_EQ(0, ops.size()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, ContinueTargetIsSwitchTarget) { + std::string shader = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %5 = OpTypeInt 32 1 + %4 = OpTypeFunction %2 + %6 = OpConstant %5 2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpLoopMerge %14 %12 None + OpBranchConditional %7 %10 %14 + %10 = OpLabel + OpSelectionMerge %15 None + OpSwitch %6 %12 1 %11 2 %11 3 %15 + %11 = OpLabel + OpBranch %12 + %12 = OpLabel + OpBranch %9 + %15 = OpLabel + OpBranch %14 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %5 = OpTypeInt 32 1 + %4 = OpTypeFunction %2 + %6 = OpConstant %5 2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %7 %10 %14 + %10 = OpLabel + OpSelectionMerge %15 None + OpSwitch %6 %15 1 %11 2 %11 3 %15 + %11 = OpLabel + OpBranch %15 + %12 = OpLabel + OpBranch %9 + %15 = OpLabel + OpBranch %14 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + MultipleSwitchTargetsAreContinueTarget) { + std::string shader = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %5 = OpTypeInt 32 1 + %4 = OpTypeFunction %2 + %6 = OpConstant %5 2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpLoopMerge %14 %12 None + OpBranchConditional %7 %10 %14 + %10 = OpLabel + OpSelectionMerge %15 None + OpSwitch %6 %11 1 %12 2 %12 3 %15 + %11 = OpLabel + OpBranch %12 + %12 = OpLabel + OpBranch %9 + %15 = OpLabel + OpBranch %14 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %5 = OpTypeInt 32 1 + %4 = OpTypeFunction %2 + %6 = OpConstant %5 2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %7 %10 %14 + %10 = OpLabel + OpSelectionMerge %15 None + OpSwitch %6 %11 1 %15 2 %15 3 %15 + %11 = OpLabel + OpBranch %15 + %12 = OpLabel + OpBranch %9 + %15 = OpLabel + OpBranch %14 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, LoopBranchesStraightToMerge) { + std::string shader = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %4 = OpTypeFunction %2 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpLoopMerge %14 %12 None + OpBranch %14 + %12 = OpLabel + OpBranch %9 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %4 = OpTypeFunction %2 + %15 = OpTypeBool + %16 = OpConstantTrue %15 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %16 %14 %14 + %12 = OpLabel + OpBranch %9 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + LoopConditionallyJumpsToMergeOrContinue) { + std::string shader = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %4 = OpTypeFunction %2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpLoopMerge %14 %12 None + OpBranchConditional %7 %14 %12 + %12 = OpLabel + OpBranch %9 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "main" + %2 = OpTypeVoid + %3 = OpTypeBool + %4 = OpTypeFunction %2 + %7 = OpConstantTrue %3 + %1 = OpFunction %2 None %4 + %8 = OpLabel + OpBranch %9 + %9 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %7 %14 %14 + %12 = OpLabel + OpBranch %9 + %14 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, MultipleAccessChains) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypeStruct %6 + %8 = OpTypeStruct %7 + %9 = OpTypePointer Function %8 + %11 = OpConstant %6 3 + %12 = OpConstantComposite %7 %11 + %13 = OpConstantComposite %8 %12 + %14 = OpTypePointer Function %7 + %16 = OpConstant %6 0 + %19 = OpTypePointer Function %6 + %15 = OpTypeBool + %18 = OpConstantTrue %15 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %10 = OpVariable %9 Function + %20 = OpVariable %19 Function + OpStore %10 %13 + OpBranch %23 + %23 = OpLabel + OpLoopMerge %25 %26 None + OpBranch %27 + %27 = OpLabel + OpSelectionMerge %28 None + OpBranchConditional %18 %29 %25 + %29 = OpLabel + %17 = OpAccessChain %14 %10 %16 + OpBranch %28 + %28 = OpLabel + %21 = OpAccessChain %19 %17 %16 + %22 = OpLoad %6 %21 + %24 = OpAccessChain %19 %10 %16 %16 + OpStore %24 %22 + OpBranch %25 + %26 = OpLabel + OpBranch %23 + %25 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypeStruct %6 + %8 = OpTypeStruct %7 + %9 = OpTypePointer Function %8 + %11 = OpConstant %6 3 + %12 = OpConstantComposite %7 %11 + %13 = OpConstantComposite %8 %12 + %14 = OpTypePointer Function %7 + %16 = OpConstant %6 0 + %19 = OpTypePointer Function %6 + %15 = OpTypeBool + %18 = OpConstantTrue %15 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %10 = OpVariable %9 Function + %20 = OpVariable %19 Function + %30 = OpVariable %14 Function + OpStore %10 %13 + OpBranch %23 + %23 = OpLabel + OpSelectionMerge %25 None + OpBranchConditional %18 %27 %25 + %27 = OpLabel + OpSelectionMerge %28 None + OpBranchConditional %18 %29 %28 + %29 = OpLabel + %17 = OpAccessChain %14 %10 %16 + OpBranch %28 + %28 = OpLabel + %21 = OpAccessChain %19 %30 %16 + %22 = OpLoad %6 %21 + %24 = OpAccessChain %19 %10 %16 %16 + OpStore %24 %22 + OpBranch %25 + %26 = OpLabel + OpBranch %23 + %25 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, expected, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + UnreachableInnerLoopContinueBranchingToOuterLoopMerge) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpLoopMerge %9 %10 None + OpBranch %11 + %11 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %12 + %13 = OpLabel + OpBranchConditional %6 %9 %11 + %12 = OpLabel + OpBranch %10 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(2, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpSelectionMerge %9 None + OpBranchConditional %6 %11 %9 + %11 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %12 + %13 = OpLabel + OpBranchConditional %6 %9 %11 + %12 = OpLabel + OpBranch %9 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + + CheckValid(env, context.get()); + + std::string after_op_1 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpSelectionMerge %9 None + OpBranchConditional %6 %11 %9 + %11 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %6 %12 %12 + %13 = OpLabel + OpBranchConditional %6 %9 %11 + %12 = OpLabel + OpBranch %9 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_1, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + UnreachableInnerLoopContinueBranchingToOuterLoopMerge2) { + // In this test, the branch to the outer loop merge from the inner loop's + // continue is part of a structured selection. + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpLoopMerge %9 %10 None + OpBranch %11 + %11 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %12 + %13 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %6 %9 %14 + %14 = OpLabel + OpBranch %11 + %12 = OpLabel + OpBranch %10 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + const auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(2, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpSelectionMerge %9 None + OpBranchConditional %6 %11 %9 + %11 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %12 + %13 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %6 %9 %14 + %14 = OpLabel + OpBranch %11 + %12 = OpLabel + OpBranch %9 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + + ASSERT_TRUE(ops[1]->PreconditionHolds()); + ops[1]->TryToApply(); + + CheckValid(env, context.get()); + + std::string after_op_1 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpSelectionMerge %9 None + OpBranchConditional %6 %11 %9 + %11 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %6 %12 %12 + %13 = OpLabel + OpSelectionMerge %14 None + OpBranchConditional %6 %9 %14 + %14 = OpLabel + OpBranch %11 + %12 = OpLabel + OpBranch %9 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_1, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, + InnerLoopHeaderBranchesToOuterLoopMerge) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpLoopMerge %9 %10 None + OpBranch %11 + %11 = OpLabel + OpLoopMerge %12 %13 None + OpBranchConditional %6 %9 %13 + %13 = OpLabel + OpBranchConditional %6 %11 %12 + %12 = OpLabel + OpBranch %10 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + // We cannot transform the inner loop due to its header jumping straight to + // the outer loop merge (the inner loop's merge does not post-dominate its + // header). + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string after_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpSelectionMerge %9 None + OpBranchConditional %6 %11 %9 + %11 = OpLabel + OpLoopMerge %12 %13 None + OpBranchConditional %6 %12 %13 + %13 = OpLabel + OpBranchConditional %6 %11 %12 + %12 = OpLabel + OpBranch %9 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_op_0, context.get()); + + // Now look again for more opportunities. + ops = pass.WrapGetAvailableOpportunities(context.get()); + + // What was the inner loop should now be transformable, as the jump to the + // outer loop's merge has been redirected. + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + std::string after_another_op_0 = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeBool + %6 = OpConstantTrue %5 + %2 = OpFunction %3 None %4 + %7 = OpLabel + OpBranch %8 + %8 = OpLabel + OpSelectionMerge %9 None + OpBranchConditional %6 %11 %9 + %11 = OpLabel + OpSelectionMerge %12 None + OpBranchConditional %6 %12 %12 + %13 = OpLabel + OpBranchConditional %6 %11 %12 + %12 = OpLabel + OpBranch %9 + %10 = OpLabel + OpBranchConditional %6 %9 %8 + %9 = OpLabel + OpReturn + OpFunctionEnd + )"; + CheckEqual(env, after_another_op_0, context.get()); +} + +TEST(StructuredLoopToSelectionReductionPassTest, LongAccessChains) { + std::string shader = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %2 "main" + OpExecutionMode %2 OriginUpperLeft + OpSource ESSL 310 + %3 = OpTypeVoid + %4 = OpTypeFunction %3 + %5 = OpTypeInt 32 1 + %6 = OpTypeInt 32 0 + %7 = OpConstant %6 5 + %8 = OpTypeArray %5 %7 + %9 = OpTypeStruct %8 + %10 = OpTypeStruct %9 %9 + %11 = OpConstant %6 2 + %12 = OpTypeArray %10 %11 + %13 = OpTypeStruct %12 + %14 = OpTypePointer Function %13 + %15 = OpConstant %5 0 + %16 = OpConstant %5 1 + %17 = OpConstant %5 2 + %18 = OpConstant %5 3 + %19 = OpConstant %5 4 + %20 = OpConstantComposite %8 %15 %16 %17 %18 %19 + %21 = OpConstantComposite %9 %20 + %22 = OpConstant %5 5 + %23 = OpConstant %5 6 + %24 = OpConstant %5 7 + %25 = OpConstant %5 8 + %26 = OpConstant %5 9 + %27 = OpConstantComposite %8 %22 %23 %24 %25 %26 + %28 = OpConstantComposite %9 %27 + %29 = OpConstantComposite %10 %21 %28 + %30 = OpConstant %5 10 + %31 = OpConstant %5 11 + %32 = OpConstant %5 12 + %33 = OpConstant %5 13 + %34 = OpConstant %5 14 + %35 = OpConstantComposite %8 %30 %31 %32 %33 %34 + %36 = OpConstantComposite %9 %35 + %37 = OpConstant %5 15 + %38 = OpConstant %5 16 + %39 = OpConstant %5 17 + %40 = OpConstant %5 18 + %41 = OpConstant %5 19 + %42 = OpConstantComposite %8 %37 %38 %39 %40 %41 + %43 = OpConstantComposite %9 %42 + %44 = OpConstantComposite %10 %36 %43 + %45 = OpConstantComposite %12 %29 %44 + %46 = OpConstantComposite %13 %45 + %47 = OpTypePointer Function %12 + %48 = OpTypePointer Function %10 + %49 = OpTypePointer Function %9 + %50 = OpTypePointer Function %8 + %51 = OpTypePointer Function %5 + %52 = OpTypeBool + %53 = OpConstantTrue %52 + %2 = OpFunction %3 None %4 + %54 = OpLabel + %55 = OpVariable %14 Function + OpStore %55 %46 + OpBranch %56 + %56 = OpLabel + OpLoopMerge %57 %58 None + OpBranchConditional %53 %57 %59 + %59 = OpLabel + OpSelectionMerge %60 None + OpBranchConditional %53 %61 %57 + %61 = OpLabel + %62 = OpAccessChain %47 %55 %15 + OpBranch %63 + %63 = OpLabel + OpSelectionMerge %64 None + OpBranchConditional %53 %65 %57 + %65 = OpLabel + %66 = OpAccessChain %48 %62 %16 + OpBranch %67 + %67 = OpLabel + OpSelectionMerge %68 None + OpBranchConditional %53 %69 %57 + %69 = OpLabel + %70 = OpAccessChain %49 %66 %16 + OpBranch %71 + %71 = OpLabel + OpSelectionMerge %72 None + OpBranchConditional %53 %73 %57 + %73 = OpLabel + %74 = OpAccessChain %50 %70 %15 + OpBranch %75 + %75 = OpLabel + OpSelectionMerge %76 None + OpBranchConditional %53 %77 %57 + %77 = OpLabel + %78 = OpAccessChain %51 %74 %17 + OpBranch %79 + %79 = OpLabel + OpSelectionMerge %80 None + OpBranchConditional %53 %81 %57 + %81 = OpLabel + %82 = OpLoad %5 %78 + OpBranch %80 + %80 = OpLabel + OpBranch %76 + %76 = OpLabel + OpBranch %72 + %72 = OpLabel + OpBranch %68 + %68 = OpLabel + OpBranch %64 + %64 = OpLabel + OpBranch %60 + %60 = OpLabel + OpBranch %58 + %58 = OpLabel + OpBranch %56 + %57 = OpLabel + OpReturn + OpFunctionEnd + )"; + + const auto env = SPV_ENV_UNIVERSAL_1_3; + const auto context = BuildModule(env, nullptr, shader, kReduceAssembleOption); + const auto pass = TestSubclass(env); + auto ops = pass.WrapGetAvailableOpportunities(context.get()); + + ASSERT_EQ(1, ops.size()); + ASSERT_TRUE(ops[0]->PreconditionHolds()); + ops[0]->TryToApply(); + + CheckValid(env, context.get()); + + // TODO(2183): When we have a more general solution for handling access + // chains, write an expected result for this test. + // std::string expected = R"( + // Expected text for transformed shader + //)"; + // CheckEqual(env, expected, context.get()); +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/reduce/validation_during_reduction_test.cpp b/3rdparty/spirv-tools/test/reduce/validation_during_reduction_test.cpp new file mode 100644 index 000000000..bb7d14e10 --- /dev/null +++ b/3rdparty/spirv-tools/test/reduce/validation_during_reduction_test.cpp @@ -0,0 +1,376 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "reduce_test_util.h" + +#include "source/reduce/reducer.h" +#include "source/reduce/reduction_pass.h" +#include "source/reduce/remove_instruction_reduction_opportunity.h" + +namespace spvtools { +namespace reduce { +namespace { + +// A dumb reduction pass that removes global values regardless of whether they +// are referenced. This is very likely to make the resulting module invalid. We +// use this to test the reducer's behavior in the scenario where a bad reduction +// pass leads to an invalid module. +class BlindlyRemoveGlobalValuesPass : public ReductionPass { + public: + // Creates the reduction pass in the context of the given target environment + // |target_env| + explicit BlindlyRemoveGlobalValuesPass(const spv_target_env target_env) + : ReductionPass(target_env) {} + + ~BlindlyRemoveGlobalValuesPass() override = default; + + // The name of this pass. + std::string GetName() const final { return "BlindlyRemoveGlobalValuesPass"; }; + + protected: + // Adds opportunities to remove all global values. Assuming they are all + // referenced (directly or indirectly) from elsewhere in the module, each such + // opportunity will make the module invalid. + std::vector> GetAvailableOpportunities( + opt::IRContext* context) const final { + std::vector> result; + for (auto& inst : context->module()->types_values()) { + if (inst.HasResultId()) { + result.push_back( + MakeUnique(&inst)); + } + } + return result; + } +}; + +TEST(ValidationDuringReductionTest, CheckInvalidPassMakesNoProgress) { + // A module whose global values are all referenced, so that any application of + // MakeModuleInvalidPass will make the module invalid. + std::string original = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %60 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %16 "buf2" + OpMemberName %16 0 "i" + OpName %18 "" + OpName %25 "buf1" + OpMemberName %25 0 "f" + OpName %27 "" + OpName %60 "_GLF_color" + OpMemberDecorate %16 0 Offset 0 + OpDecorate %16 Block + OpDecorate %18 DescriptorSet 0 + OpDecorate %18 Binding 2 + OpMemberDecorate %25 0 Offset 0 + OpDecorate %25 Block + OpDecorate %27 DescriptorSet 0 + OpDecorate %27 Binding 1 + OpDecorate %60 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %9 = OpConstant %6 0 + %16 = OpTypeStruct %6 + %17 = OpTypePointer Uniform %16 + %18 = OpVariable %17 Uniform + %19 = OpTypePointer Uniform %6 + %22 = OpTypeBool + %24 = OpTypeFloat 32 + %25 = OpTypeStruct %24 + %26 = OpTypePointer Uniform %25 + %27 = OpVariable %26 Uniform + %28 = OpTypePointer Uniform %24 + %31 = OpConstant %24 2 + %56 = OpConstant %6 1 + %58 = OpTypeVector %24 4 + %59 = OpTypePointer Output %58 + %60 = OpVariable %59 Output + %72 = OpUndef %24 + %74 = OpUndef %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %10 + %10 = OpLabel + %73 = OpPhi %6 %74 %5 %77 %34 + %71 = OpPhi %24 %72 %5 %76 %34 + %70 = OpPhi %6 %9 %5 %57 %34 + %20 = OpAccessChain %19 %18 %9 + %21 = OpLoad %6 %20 + %23 = OpSLessThan %22 %70 %21 + OpLoopMerge %12 %34 None + OpBranchConditional %23 %11 %12 + %11 = OpLabel + %29 = OpAccessChain %28 %27 %9 + %30 = OpLoad %24 %29 + %32 = OpFOrdGreaterThan %22 %30 %31 + OpSelectionMerge %34 None + OpBranchConditional %32 %33 %46 + %33 = OpLabel + %40 = OpFAdd %24 %71 %30 + %45 = OpISub %6 %73 %21 + OpBranch %34 + %46 = OpLabel + %50 = OpFMul %24 %71 %30 + %54 = OpSDiv %6 %73 %21 + OpBranch %34 + %34 = OpLabel + %77 = OpPhi %6 %45 %33 %54 %46 + %76 = OpPhi %24 %40 %33 %50 %46 + %57 = OpIAdd %6 %70 %56 + OpBranch %10 + %12 = OpLabel + %61 = OpAccessChain %28 %27 %9 + %62 = OpLoad %24 %61 + %66 = OpConvertSToF %24 %21 + %68 = OpConvertSToF %24 %73 + %69 = OpCompositeConstruct %58 %62 %71 %66 %68 + OpStore %60 %69 + OpReturn + OpFunctionEnd + )"; + + spv_target_env env = SPV_ENV_UNIVERSAL_1_3; + Reducer reducer(env); + reducer.SetMessageConsumer(NopDiagnostic); + + // Say that every module is interesting. + reducer.SetInterestingnessFunction( + [](const std::vector&, uint32_t) -> bool { return true; }); + + reducer.AddReductionPass(MakeUnique(env)); + + std::vector binary_in; + SpirvTools t(env); + + ASSERT_TRUE(t.Assemble(original, &binary_in, kReduceAssembleOption)); + std::vector binary_out; + spvtools::ReducerOptions reducer_options; + reducer_options.set_step_limit(500); + + reducer.Run(std::move(binary_in), &binary_out, reducer_options); + + // The reducer should have no impact. + CheckEqual(env, original, binary_out); +} + +TEST(ValidationDuringReductionTest, CheckNotAlwaysInvalidCanMakeProgress) { + // A module with just one unreferenced global value. All but one application + // of MakeModuleInvalidPass will make the module invalid. + std::string original = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %60 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %16 "buf2" + OpMemberName %16 0 "i" + OpName %18 "" + OpName %25 "buf1" + OpMemberName %25 0 "f" + OpName %27 "" + OpName %60 "_GLF_color" + OpMemberDecorate %16 0 Offset 0 + OpDecorate %16 Block + OpDecorate %18 DescriptorSet 0 + OpDecorate %18 Binding 2 + OpMemberDecorate %25 0 Offset 0 + OpDecorate %25 Block + OpDecorate %27 DescriptorSet 0 + OpDecorate %27 Binding 1 + OpDecorate %60 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %9 = OpConstant %6 0 + %16 = OpTypeStruct %6 + %17 = OpTypePointer Uniform %16 + %18 = OpVariable %17 Uniform + %19 = OpTypePointer Uniform %6 + %22 = OpTypeBool + %24 = OpTypeFloat 32 + %25 = OpTypeStruct %24 + %26 = OpTypePointer Uniform %25 + %27 = OpVariable %26 Uniform + %28 = OpTypePointer Uniform %24 + %31 = OpConstant %24 2 + %56 = OpConstant %6 1 + %1000 = OpConstant %6 1000 ; It should be possible to remove this instruction without making the module invalid. + %58 = OpTypeVector %24 4 + %59 = OpTypePointer Output %58 + %60 = OpVariable %59 Output + %72 = OpUndef %24 + %74 = OpUndef %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %10 + %10 = OpLabel + %73 = OpPhi %6 %74 %5 %77 %34 + %71 = OpPhi %24 %72 %5 %76 %34 + %70 = OpPhi %6 %9 %5 %57 %34 + %20 = OpAccessChain %19 %18 %9 + %21 = OpLoad %6 %20 + %23 = OpSLessThan %22 %70 %21 + OpLoopMerge %12 %34 None + OpBranchConditional %23 %11 %12 + %11 = OpLabel + %29 = OpAccessChain %28 %27 %9 + %30 = OpLoad %24 %29 + %32 = OpFOrdGreaterThan %22 %30 %31 + OpSelectionMerge %34 None + OpBranchConditional %32 %33 %46 + %33 = OpLabel + %40 = OpFAdd %24 %71 %30 + %45 = OpISub %6 %73 %21 + OpBranch %34 + %46 = OpLabel + %50 = OpFMul %24 %71 %30 + %54 = OpSDiv %6 %73 %21 + OpBranch %34 + %34 = OpLabel + %77 = OpPhi %6 %45 %33 %54 %46 + %76 = OpPhi %24 %40 %33 %50 %46 + %57 = OpIAdd %6 %70 %56 + OpBranch %10 + %12 = OpLabel + %61 = OpAccessChain %28 %27 %9 + %62 = OpLoad %24 %61 + %66 = OpConvertSToF %24 %21 + %68 = OpConvertSToF %24 %73 + %69 = OpCompositeConstruct %58 %62 %71 %66 %68 + OpStore %60 %69 + OpReturn + OpFunctionEnd + )"; + + // This is the same as the original, except that the constant declaration of + // 1000 is gone. + std::string expected = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %60 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %16 "buf2" + OpMemberName %16 0 "i" + OpName %18 "" + OpName %25 "buf1" + OpMemberName %25 0 "f" + OpName %27 "" + OpName %60 "_GLF_color" + OpMemberDecorate %16 0 Offset 0 + OpDecorate %16 Block + OpDecorate %18 DescriptorSet 0 + OpDecorate %18 Binding 2 + OpMemberDecorate %25 0 Offset 0 + OpDecorate %25 Block + OpDecorate %27 DescriptorSet 0 + OpDecorate %27 Binding 1 + OpDecorate %60 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %9 = OpConstant %6 0 + %16 = OpTypeStruct %6 + %17 = OpTypePointer Uniform %16 + %18 = OpVariable %17 Uniform + %19 = OpTypePointer Uniform %6 + %22 = OpTypeBool + %24 = OpTypeFloat 32 + %25 = OpTypeStruct %24 + %26 = OpTypePointer Uniform %25 + %27 = OpVariable %26 Uniform + %28 = OpTypePointer Uniform %24 + %31 = OpConstant %24 2 + %56 = OpConstant %6 1 + %58 = OpTypeVector %24 4 + %59 = OpTypePointer Output %58 + %60 = OpVariable %59 Output + %72 = OpUndef %24 + %74 = OpUndef %6 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpBranch %10 + %10 = OpLabel + %73 = OpPhi %6 %74 %5 %77 %34 + %71 = OpPhi %24 %72 %5 %76 %34 + %70 = OpPhi %6 %9 %5 %57 %34 + %20 = OpAccessChain %19 %18 %9 + %21 = OpLoad %6 %20 + %23 = OpSLessThan %22 %70 %21 + OpLoopMerge %12 %34 None + OpBranchConditional %23 %11 %12 + %11 = OpLabel + %29 = OpAccessChain %28 %27 %9 + %30 = OpLoad %24 %29 + %32 = OpFOrdGreaterThan %22 %30 %31 + OpSelectionMerge %34 None + OpBranchConditional %32 %33 %46 + %33 = OpLabel + %40 = OpFAdd %24 %71 %30 + %45 = OpISub %6 %73 %21 + OpBranch %34 + %46 = OpLabel + %50 = OpFMul %24 %71 %30 + %54 = OpSDiv %6 %73 %21 + OpBranch %34 + %34 = OpLabel + %77 = OpPhi %6 %45 %33 %54 %46 + %76 = OpPhi %24 %40 %33 %50 %46 + %57 = OpIAdd %6 %70 %56 + OpBranch %10 + %12 = OpLabel + %61 = OpAccessChain %28 %27 %9 + %62 = OpLoad %24 %61 + %66 = OpConvertSToF %24 %21 + %68 = OpConvertSToF %24 %73 + %69 = OpCompositeConstruct %58 %62 %71 %66 %68 + OpStore %60 %69 + OpReturn + OpFunctionEnd + )"; + + spv_target_env env = SPV_ENV_UNIVERSAL_1_3; + Reducer reducer(env); + reducer.SetMessageConsumer(NopDiagnostic); + + // Say that every module is interesting. + reducer.SetInterestingnessFunction( + [](const std::vector&, uint32_t) -> bool { return true; }); + + reducer.AddReductionPass(MakeUnique(env)); + + std::vector binary_in; + SpirvTools t(env); + + ASSERT_TRUE(t.Assemble(original, &binary_in, kReduceAssembleOption)); + std::vector binary_out; + spvtools::ReducerOptions reducer_options; + reducer_options.set_step_limit(500); + + reducer.Run(std::move(binary_in), &binary_out, reducer_options); + CheckEqual(env, expected, binary_out); +} + +} // namespace +} // namespace reduce +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/stats/CMakeLists.txt b/3rdparty/spirv-tools/test/stats/CMakeLists.txt index 3e4a0742f..393cb246d 100644 --- a/3rdparty/spirv-tools/test/stats/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/stats/CMakeLists.txt @@ -17,15 +17,10 @@ set(VAL_TEST_COMMON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../unit_spirv.h ) -add_spvtools_unittest(TARGET stats_aggregate +add_spvtools_unittest(TARGET stats SRCS stats_aggregate_test.cpp + stats_analyzer_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/stats/spirv_stats.cpp - ${VAL_TEST_COMMON_SRCS} - LIBS ${SPIRV_TOOLS} -) - -add_spvtools_unittest(TARGET stats_analyzer - SRCS stats_analyzer_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/stats/stats_analyzer.cpp ${VAL_TEST_COMMON_SRCS} LIBS ${SPIRV_TOOLS} diff --git a/3rdparty/spirv-tools/test/stats/stats_aggregate_test.cpp b/3rdparty/spirv-tools/test/stats/stats_aggregate_test.cpp index 505fe2d6d..074528543 100644 --- a/3rdparty/spirv-tools/test/stats/stats_aggregate_test.cpp +++ b/3rdparty/spirv-tools/test/stats/stats_aggregate_test.cpp @@ -51,13 +51,13 @@ void DiagnosticsMessageHandler(spv_message_level_t level, const char*, // Calls AggregateStats for binary compiled from |code|. void CompileAndAggregateStats(const std::string& code, SpirvStats* stats, spv_target_env env = SPV_ENV_UNIVERSAL_1_1) { - ScopedContext ctx(env); - SetContextMessageConsumer(ctx.context, DiagnosticsMessageHandler); + spvtools::Context ctx(env); + ctx.SetMessageConsumer(DiagnosticsMessageHandler); spv_binary binary; - ASSERT_EQ(SPV_SUCCESS, spvTextToBinary(ctx.context, code.c_str(), code.size(), - &binary, nullptr)); + ASSERT_EQ(SPV_SUCCESS, spvTextToBinary(ctx.CContext(), code.c_str(), + code.size(), &binary, nullptr)); - ASSERT_EQ(SPV_SUCCESS, AggregateStats(*ctx.context, binary->code, + ASSERT_EQ(SPV_SUCCESS, AggregateStats(ctx.CContext(), binary->code, binary->wordCount, nullptr, stats)); spvBinaryDestroy(binary); } diff --git a/3rdparty/spirv-tools/test/text_to_binary.extension_test.cpp b/3rdparty/spirv-tools/test/text_to_binary.extension_test.cpp index 0d8d324b8..5c0bf9885 100644 --- a/3rdparty/spirv-tools/test/text_to_binary.extension_test.cpp +++ b/3rdparty/spirv-tools/test/text_to_binary.extension_test.cpp @@ -510,6 +510,150 @@ INSTANTIATE_TEST_CASE_P( {SpvCapabilityVariablePointersStorageBuffer})}, })), ); +// SPV_KHR_vulkan_memory_model + +INSTANTIATE_TEST_CASE_P( + SPV_KHR_vulkan_memory_model, ExtensionRoundTripTest, + // We'll get coverage over operand tables by trying the universal + // environments, and at least one specific environment. + // + // Note: SPV_KHR_vulkan_memory_model adds scope enum value QueueFamilyKHR. + // Scope enums are used in ID definitions elsewhere, that don't know they + // are using particular enums. So the assembler doesn't support assembling + // those enums names into the corresponding values. So there is no asm/dis + // tests for those enums. + Combine( + Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1, + SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_1), + ValuesIn(std::vector{ + {"OpCapability VulkanMemoryModelKHR\n", + MakeInstruction(SpvOpCapability, + {SpvCapabilityVulkanMemoryModelKHR})}, + {"OpCapability VulkanMemoryModelDeviceScopeKHR\n", + MakeInstruction(SpvOpCapability, + {SpvCapabilityVulkanMemoryModelDeviceScopeKHR})}, + {"OpMemoryModel Logical VulkanKHR\n", + MakeInstruction(SpvOpMemoryModel, {SpvAddressingModelLogical, + SpvMemoryModelVulkanKHR})}, + {"OpStore %1 %2 MakePointerAvailableKHR %3\n", + MakeInstruction(SpvOpStore, + {1, 2, SpvMemoryAccessMakePointerAvailableKHRMask, + 3})}, + {"OpStore %1 %2 Volatile|MakePointerAvailableKHR %3\n", + MakeInstruction(SpvOpStore, + {1, 2, + int(SpvMemoryAccessMakePointerAvailableKHRMask) | + int(SpvMemoryAccessVolatileMask), + 3})}, + {"OpStore %1 %2 Aligned|MakePointerAvailableKHR 4 %3\n", + MakeInstruction(SpvOpStore, + {1, 2, + int(SpvMemoryAccessMakePointerAvailableKHRMask) | + int(SpvMemoryAccessAlignedMask), + 4, 3})}, + {"OpStore %1 %2 MakePointerAvailableKHR|NonPrivatePointerKHR %3\n", + MakeInstruction(SpvOpStore, + {1, 2, + int(SpvMemoryAccessMakePointerAvailableKHRMask) | + int(SpvMemoryAccessNonPrivatePointerKHRMask), + 3})}, + {"%2 = OpLoad %1 %3 MakePointerVisibleKHR %4\n", + MakeInstruction(SpvOpLoad, + {1, 2, 3, SpvMemoryAccessMakePointerVisibleKHRMask, + 4})}, + {"%2 = OpLoad %1 %3 Volatile|MakePointerVisibleKHR %4\n", + MakeInstruction(SpvOpLoad, + {1, 2, 3, + int(SpvMemoryAccessMakePointerVisibleKHRMask) | + int(SpvMemoryAccessVolatileMask), + 4})}, + {"%2 = OpLoad %1 %3 Aligned|MakePointerVisibleKHR 8 %4\n", + MakeInstruction(SpvOpLoad, + {1, 2, 3, + int(SpvMemoryAccessMakePointerVisibleKHRMask) | + int(SpvMemoryAccessAlignedMask), + 8, 4})}, + {"%2 = OpLoad %1 %3 MakePointerVisibleKHR|NonPrivatePointerKHR " + "%4\n", + MakeInstruction(SpvOpLoad, + {1, 2, 3, + int(SpvMemoryAccessMakePointerVisibleKHRMask) | + int(SpvMemoryAccessNonPrivatePointerKHRMask), + 4})}, + {"OpCopyMemory %1 %2 " + "MakePointerAvailableKHR|" + "MakePointerVisibleKHR|" + "NonPrivatePointerKHR " + "%3 %4\n", + MakeInstruction(SpvOpCopyMemory, + {1, 2, + (int(SpvMemoryAccessMakePointerVisibleKHRMask) | + int(SpvMemoryAccessMakePointerAvailableKHRMask) | + int(SpvMemoryAccessNonPrivatePointerKHRMask)), + 3, 4})}, + {"OpCopyMemorySized %1 %2 %3 " + "MakePointerAvailableKHR|" + "MakePointerVisibleKHR|" + "NonPrivatePointerKHR " + "%4 %5\n", + MakeInstruction(SpvOpCopyMemorySized, + {1, 2, 3, + (int(SpvMemoryAccessMakePointerVisibleKHRMask) | + int(SpvMemoryAccessMakePointerAvailableKHRMask) | + int(SpvMemoryAccessNonPrivatePointerKHRMask)), + 4, 5})}, + // Image operands + {"OpImageWrite %1 %2 %3 MakeTexelAvailableKHR " + "%4\n", + MakeInstruction( + SpvOpImageWrite, + {1, 2, 3, int(SpvImageOperandsMakeTexelAvailableKHRMask), 4})}, + {"OpImageWrite %1 %2 %3 MakeTexelAvailableKHR|NonPrivateTexelKHR " + "%4\n", + MakeInstruction(SpvOpImageWrite, + {1, 2, 3, + int(SpvImageOperandsMakeTexelAvailableKHRMask) | + int(SpvImageOperandsNonPrivateTexelKHRMask), + 4})}, + {"OpImageWrite %1 %2 %3 " + "MakeTexelAvailableKHR|NonPrivateTexelKHR|VolatileTexelKHR " + "%4\n", + MakeInstruction(SpvOpImageWrite, + {1, 2, 3, + int(SpvImageOperandsMakeTexelAvailableKHRMask) | + int(SpvImageOperandsNonPrivateTexelKHRMask) | + int(SpvImageOperandsVolatileTexelKHRMask), + 4})}, + {"%2 = OpImageRead %1 %3 %4 MakeTexelVisibleKHR " + "%5\n", + MakeInstruction(SpvOpImageRead, + {1, 2, 3, 4, + int(SpvImageOperandsMakeTexelVisibleKHRMask), + 5})}, + {"%2 = OpImageRead %1 %3 %4 " + "MakeTexelVisibleKHR|NonPrivateTexelKHR " + "%5\n", + MakeInstruction(SpvOpImageRead, + {1, 2, 3, 4, + int(SpvImageOperandsMakeTexelVisibleKHRMask) | + int(SpvImageOperandsNonPrivateTexelKHRMask), + 5})}, + {"%2 = OpImageRead %1 %3 %4 " + "MakeTexelVisibleKHR|NonPrivateTexelKHR|VolatileTexelKHR " + "%5\n", + MakeInstruction(SpvOpImageRead, + {1, 2, 3, 4, + int(SpvImageOperandsMakeTexelVisibleKHRMask) | + int(SpvImageOperandsNonPrivateTexelKHRMask) | + int(SpvImageOperandsVolatileTexelKHRMask), + 5})}, + + // Memory semantics ID values are numbers put into a SPIR-V + // constant integer referenced by Id. There is no token for + // them, and so no assembler or disassembler support required. + // Similar for Scope ID. + })), ); + // SPV_GOOGLE_decorate_string INSTANTIATE_TEST_CASE_P( diff --git a/3rdparty/spirv-tools/test/tools/opt/CMakeLists.txt b/3rdparty/spirv-tools/test/tools/opt/CMakeLists.txt index a6dc5262d..21aa247f1 100644 --- a/3rdparty/spirv-tools/test/tools/opt/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/tools/opt/CMakeLists.txt @@ -14,7 +14,7 @@ if(NOT ${SPIRV_SKIP_TESTS}) if(${PYTHONINTERP_FOUND}) - add_test(NAME spirv_opt_tests + add_test(NAME spirv_opt_cli_tools_tests COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../spirv_test_framework.py $ $ $ diff --git a/3rdparty/spirv-tools/test/tools/opt/flags.py b/3rdparty/spirv-tools/test/tools/opt/flags.py index 628d87108..69462fcc5 100644 --- a/3rdparty/spirv-tools/test/tools/opt/flags.py +++ b/3rdparty/spirv-tools/test/tools/opt/flags.py @@ -135,6 +135,7 @@ class TestPerformanceOptimizationPasses(expect.ValidObjectFile1_3, flags = ['-O'] expected_passes = [ + 'eliminate-dead-branches', 'merge-return', 'inline-entry-points-exhaustive', 'eliminate-dead-code-aggressive', @@ -181,6 +182,7 @@ class TestSizeOptimizationPasses(expect.ValidObjectFile1_3, flags = ['-Os'] expected_passes = [ + 'eliminate-dead-branches', 'merge-return', 'inline-entry-points-exhaustive', 'eliminate-dead-code-aggressive', @@ -235,6 +237,7 @@ class TestLegalizationPasses(expect.ValidObjectFile1_3, 'eliminate-local-multi-store', 'eliminate-dead-code-aggressive', 'ccp', + 'loop-unroll', 'eliminate-dead-branches', 'simplify-instructions', 'eliminate-dead-code-aggressive', @@ -255,7 +258,7 @@ class TestScalarReplacementArgsNegative(expect.ErrorMessageSubstr): """Tests invalid arguments to --scalar-replacement.""" spirv_args = ['--scalar-replacement=-10'] - expected_error_substr = 'must have no arguments or a positive integer argument' + expected_error_substr = 'must have no arguments or a non-negative integer argument' @inside_spirv_testsuite('SpirvOptFlags') @@ -263,7 +266,7 @@ class TestScalarReplacementArgsInvalidNumber(expect.ErrorMessageSubstr): """Tests invalid arguments to --scalar-replacement.""" spirv_args = ['--scalar-replacement=a10f'] - expected_error_substr = 'must have no arguments or a positive integer argument' + expected_error_substr = 'must have no arguments or a non-negative integer argument' @inside_spirv_testsuite('SpirvOptFlags') diff --git a/3rdparty/spirv-tools/test/tools/opt/oconfig.py b/3rdparty/spirv-tools/test/tools/opt/oconfig.py index 337237994..899d93e56 100644 --- a/3rdparty/spirv-tools/test/tools/opt/oconfig.py +++ b/3rdparty/spirv-tools/test/tools/opt/oconfig.py @@ -56,3 +56,18 @@ class TestOconfigComments(expect.SuccessfulReturn): --loop-unroll """, '.cfg') spirv_args = [shader, '-o', placeholder.TempFileName('output.spv'), config] + +@inside_spirv_testsuite('SpirvOptConfigFile') +class TestOconfigComments(expect.SuccessfulReturn): + """Tests empty config files are accepted. + + https://github.com/KhronosGroup/SPIRV-Tools/issues/1778 + """ + + shader = placeholder.FileSPIRVShader(empty_main_assembly(), '.spvasm') + config = placeholder.ConfigFlagsFile(""" +# This is a comment. +-O +--relax-struct-store +""", '.cfg') + spirv_args = [shader, '-o', placeholder.TempFileName('output.spv'), config] diff --git a/3rdparty/spirv-tools/test/util/CMakeLists.txt b/3rdparty/spirv-tools/test/util/CMakeLists.txt index 66d4e8a42..8cdb35f42 100644 --- a/3rdparty/spirv-tools/test/util/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/util/CMakeLists.txt @@ -12,15 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -add_spvtools_unittest(TARGET util_intrusive_list +add_spvtools_unittest(TARGET utils SRCS ilist_test.cpp -) - -add_spvtools_unittest(TARGET bit_vector - SRCS bit_vector_test.cpp + bit_vector_test.cpp + small_vector_test.cpp LIBS SPIRV-Tools-opt ) - -add_spvtools_unittest(TARGET small_vector - SRCS small_vector_test.cpp -) diff --git a/3rdparty/spirv-tools/test/val/CMakeLists.txt b/3rdparty/spirv-tools/test/val/CMakeLists.txt index b1e87da66..d478a7d1c 100644 --- a/3rdparty/spirv-tools/test/val/CMakeLists.txt +++ b/3rdparty/spirv-tools/test/val/CMakeLists.txt @@ -29,6 +29,7 @@ add_spvtools_unittest(TARGET val_abcde val_capability_test.cpp val_cfg_test.cpp val_composites_test.cpp + val_constants_test.cpp val_conversion_test.cpp val_data_test.cpp val_decoration_test.cpp @@ -38,6 +39,7 @@ add_spvtools_unittest(TARGET val_abcde val_ext_inst_test.cpp ${VAL_TEST_COMMON_SRCS} LIBS ${SPIRV_TOOLS} + PCH_FILE pch_test_val ) add_spvtools_unittest(TARGET val_limits @@ -54,10 +56,13 @@ add_spvtools_unittest(TARGET val_ijklmnop val_layout_test.cpp val_literals_test.cpp val_logicals_test.cpp + val_memory_test.cpp + val_modes_test.cpp val_non_uniform_test.cpp val_primitives_test.cpp ${VAL_TEST_COMMON_SRCS} LIBS ${SPIRV_TOOLS} + PCH_FILE pch_test_val ) add_spvtools_unittest(TARGET val_stuvw @@ -71,4 +76,5 @@ add_spvtools_unittest(TARGET val_stuvw val_webgpu_test.cpp ${VAL_TEST_COMMON_SRCS} LIBS ${SPIRV_TOOLS} + PCH_FILE pch_test_val ) diff --git a/3rdparty/spirv-tools/test/val/pch_test_val.cpp b/3rdparty/spirv-tools/test/val/pch_test_val.cpp new file mode 100644 index 000000000..fc92e375a --- /dev/null +++ b/3rdparty/spirv-tools/test/val/pch_test_val.cpp @@ -0,0 +1,15 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pch_test_val.h" diff --git a/3rdparty/spirv-tools/test/val/pch_test_val.h b/3rdparty/spirv-tools/test/val/pch_test_val.h new file mode 100644 index 000000000..7b5881c43 --- /dev/null +++ b/3rdparty/spirv-tools/test/val/pch_test_val.h @@ -0,0 +1,19 @@ +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "gmock/gmock.h" +#include "test/unit_spirv.h" +#include "test/val/val_fixtures.h" diff --git a/3rdparty/spirv-tools/test/val/val_adjacency_test.cpp b/3rdparty/spirv-tools/test/val/val_adjacency_test.cpp index d62830514..5c1124ae5 100644 --- a/3rdparty/spirv-tools/test/val/val_adjacency_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_adjacency_test.cpp @@ -34,6 +34,7 @@ TEST_F(ValidateAdjacency, OpPhiBeginsModuleFail) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -52,7 +53,8 @@ OpFunctionEnd CompileSuccessfully(module); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 1 has not been defined")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 1[%bool] has not been defined")); } TEST_F(ValidateAdjacency, OpLoopMergeEndsModuleFail) { @@ -60,6 +62,7 @@ TEST_F(ValidateAdjacency, OpLoopMergeEndsModuleFail) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %func = OpTypeFunction %void %main = OpFunction %void None %func @@ -80,6 +83,7 @@ TEST_F(ValidateAdjacency, OpSelectionMergeEndsModuleFail) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %func = OpTypeFunction %void %main = OpFunction %void None %func @@ -103,6 +107,9 @@ std::string GenerateShaderCode( ss << capabilities_and_extensions << "\n"; ss << "OpMemoryModel Logical GLSL450\n"; ss << "OpEntryPoint " << execution_model << " %main \"main\"\n"; + if (execution_model == "Fragment") { + ss << "OpExecutionMode %main OriginUpperLeft\n"; + } ss << R"( %string = OpString "" @@ -112,7 +119,9 @@ std::string GenerateShaderCode( %true = OpConstantTrue %bool %false = OpConstantFalse %bool %zero = OpConstant %int 0 +%int_1 = OpConstant %int 1 %func = OpTypeFunction %void +%func_int = OpTypePointer Function %int %main = OpFunction %void None %func %main_entry = OpLabel )"; @@ -193,7 +202,179 @@ OpNop CompileSuccessfully(GenerateShaderCode(body)); EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpPhi must appear before all non-OpPhi instructions")); + HasSubstr("OpPhi must appear within a non-entry block before all " + "non-OpPhi instructions")); +} + +TEST_F(ValidateAdjacency, OpPhiPreceededByOpLineAndBadOpFail) { + const std::string body = R"( +OpSelectionMerge %end_label None +OpBranchConditional %true %true_label %false_label +%true_label = OpLabel +OpBranch %end_label +%false_label = OpLabel +OpBranch %end_label +%end_label = OpLabel +OpNop +OpLine %string 1 1 +%result = OpPhi %bool %true %true_label %false %false_label +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpPhi must appear within a non-entry block before all " + "non-OpPhi instructions")); +} + +TEST_F(ValidateAdjacency, OpPhiFollowedByOpLineGood) { + const std::string body = R"( +OpSelectionMerge %end_label None +OpBranchConditional %true %true_label %false_label +%true_label = OpLabel +OpBranch %end_label +%false_label = OpLabel +OpBranch %end_label +%end_label = OpLabel +%result = OpPhi %bool %true %true_label %false %false_label +OpLine %string 1 1 +OpNop +OpNop +OpLine %string 2 1 +OpNop +OpLine %string 3 1 +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateAdjacency, OpPhiMultipleOpLineAndOpPhiFail) { + const std::string body = R"( +OpSelectionMerge %end_label None +OpBranchConditional %true %true_label %false_label +%true_label = OpLabel +OpBranch %end_label +%false_label = OpLabel +OpBranch %end_label +%end_label = OpLabel +OpLine %string 1 1 +%value = OpPhi %int %zero %true_label %int_1 %false_label +OpNop +OpLine %string 2 1 +OpNop +OpLine %string 3 1 +%result = OpPhi %bool %true %true_label %false %false_label +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpPhi must appear within a non-entry block before all " + "non-OpPhi instructions")); +} + +TEST_F(ValidateAdjacency, OpPhiMultipleOpLineAndOpPhiGood) { + const std::string body = R"( +OpSelectionMerge %end_label None +OpBranchConditional %true %true_label %false_label +%true_label = OpLabel +OpBranch %end_label +%false_label = OpLabel +OpBranch %end_label +%end_label = OpLabel +OpLine %string 1 1 +%value = OpPhi %int %zero %true_label %int_1 %false_label +OpLine %string 2 1 +%result = OpPhi %bool %true %true_label %false %false_label +OpLine %string 3 1 +OpNop +OpNop +OpLine %string 4 1 +OpNop +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateAdjacency, OpPhiInEntryBlockBad) { + const std::string body = R"( +OpLine %string 1 1 +%value = OpPhi %int +OpLine %string 2 1 +OpNop +OpLine %string 3 1 +OpNop +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpPhi must appear within a non-entry block before all " + "non-OpPhi instructions")); +} + +TEST_F(ValidateAdjacency, OpVariableInFunctionGood) { + const std::string body = R"( +OpLine %string 1 1 +%var = OpVariable %func_int Function +OpLine %string 2 1 +OpNop +OpLine %string 3 1 +OpNop +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateAdjacency, OpVariableInFunctionMultipleGood) { + const std::string body = R"( +OpLine %string 1 1 +%1 = OpVariable %func_int Function +OpLine %string 2 1 +%2 = OpVariable %func_int Function +%3 = OpVariable %func_int Function +OpNop +OpLine %string 3 1 +OpNop +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateAdjacency, OpVariableInFunctionBad) { + const std::string body = R"( +%1 = OpUndef %int +%2 = OpVariable %func_int Function +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("All OpVariable instructions in a function must be the " + "first instructions")); +} + +TEST_F(ValidateAdjacency, OpVariableInFunctionMultipleBad) { + const std::string body = R"( +OpNop +%1 = OpVariable %func_int Function +OpLine %string 1 1 +%2 = OpVariable %func_int Function +OpNop +OpNop +OpLine %string 2 1 +%3 = OpVariable %func_int Function +)"; + + CompileSuccessfully(GenerateShaderCode(body)); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("All OpVariable instructions in a function must be the " + "first instructions")); } TEST_F(ValidateAdjacency, OpLoopMergePreceedsOpBranchSuccess) { diff --git a/3rdparty/spirv-tools/test/val/val_arithmetics_test.cpp b/3rdparty/spirv-tools/test/val/val_arithmetics_test.cpp index 1c8d88be5..87e006c12 100644 --- a/3rdparty/spirv-tools/test/val/val_arithmetics_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_arithmetics_test.cpp @@ -39,6 +39,7 @@ OpCapability Matrix %ext_inst = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %func = OpTypeFunction %void %bool = OpTypeBool @@ -604,10 +605,9 @@ TEST_F(ValidateArithmetics, DotNotVectorTypeOperand1) { )"; CompileSuccessfully(GenerateCode(body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("Expected float vector as operand: Dot operand index 2")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 6[%float] cannot be a " + "type")); } TEST_F(ValidateArithmetics, DotNotVectorTypeOperand2) { diff --git a/3rdparty/spirv-tools/test/val/val_atomics_test.cpp b/3rdparty/spirv-tools/test/val/val_atomics_test.cpp index 9aece39aa..03bbe82f9 100644 --- a/3rdparty/spirv-tools/test/val/val_atomics_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_atomics_test.cpp @@ -28,32 +28,29 @@ using ::testing::Not; using ValidateAtomics = spvtest::ValidateBase; -std::string GenerateShaderCode( - const std::string& body, - const std::string& capabilities_and_extensions = "") { +std::string GenerateShaderCodeImpl( + const std::string& body, const std::string& capabilities_and_extensions, + const std::string& definitions, const std::string& memory_model) { std::ostringstream ss; ss << R"( OpCapability Shader -OpCapability Int64 )"; - ss << capabilities_and_extensions; + ss << "OpMemoryModel Logical " << memory_model << "\n"; ss << R"( -OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %func = OpTypeFunction %void %bool = OpTypeBool %f32 = OpTypeFloat 32 %u32 = OpTypeInt 32 0 -%u64 = OpTypeInt 64 0 %f32vec4 = OpTypeVector %f32 4 %f32_0 = OpConstant %f32 0 %f32_1 = OpConstant %f32 1 %u32_0 = OpConstant %u32 0 %u32_1 = OpConstant %u32 1 -%u64_1 = OpConstant %u64 1 %f32vec4_0000 = OpConstantComposite %f32vec4 %f32_0 %f32_0 %f32_0 %f32_0 %cross_device = OpConstant %u32 0 @@ -61,6 +58,7 @@ OpEntryPoint Fragment %main "main" %workgroup = OpConstant %u32 2 %subgroup = OpConstant %u32 3 %invocation = OpConstant %u32 4 +%queuefamily = OpConstant %u32 5 %relaxed = OpConstant %u32 0 %acquire = OpConstant %u32 2 @@ -76,20 +74,17 @@ OpEntryPoint Fragment %main "main" %u32_ptr = OpTypePointer Workgroup %u32 %u32_var = OpVariable %u32_ptr Workgroup -%u64_ptr = OpTypePointer Workgroup %u64 -%u64_var = OpVariable %u64_ptr Workgroup - %f32vec4_ptr = OpTypePointer Workgroup %f32vec4 %f32vec4_var = OpVariable %f32vec4_ptr Workgroup %f32_ptr_function = OpTypePointer Function %f32 - +)"; + ss << definitions; + ss << R"( %main = OpFunction %void None %func %main_entry = OpLabel )"; - ss << body; - ss << R"( OpReturn OpFunctionEnd)"; @@ -97,6 +92,44 @@ OpFunctionEnd)"; return ss.str(); } +std::string GenerateShaderCode( + const std::string& body, + const std::string& capabilities_and_extensions = "", + const std::string& memory_model = "GLSL450") { + const std::string defintions = R"( +%u64 = OpTypeInt 64 0 +%s64 = OpTypeInt 64 1 + +%u64_1 = OpConstant %u64 1 +%s64_1 = OpConstant %s64 1 + +%u64_ptr = OpTypePointer Workgroup %u64 +%s64_ptr = OpTypePointer Workgroup %s64 +%u64_var = OpVariable %u64_ptr Workgroup +%s64_var = OpVariable %s64_ptr Workgroup +)"; + return GenerateShaderCodeImpl( + body, "OpCapability Int64\n" + capabilities_and_extensions, defintions, + memory_model); +} + +std::string GenerateWebGPUShaderCode( + const std::string& body, + const std::string& capabilities_and_extensions = "") { + const std::string vulkan_memory_capability = R"( +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability VulkanMemoryModelKHR +)"; + const std::string vulkan_memory_extension = R"( +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + return GenerateShaderCodeImpl(body, + vulkan_memory_capability + + capabilities_and_extensions + + vulkan_memory_extension, + "", "VulkanKHR"); +} + std::string GenerateKernelCode( const std::string& body, const std::string& capabilities_and_extensions = "") { @@ -154,6 +187,8 @@ OpMemoryModel Physical32 OpenCL %f32vec4_var = OpVariable %f32vec4_ptr Workgroup %f32_ptr_function = OpTypePointer Function %f32 +%f32_ptr_uniformconstant = OpTypePointer UniformConstant %f32 +%f32_uc_var = OpVariable %f32_ptr_uniformconstant UniformConstant %main = OpFunction %void None %func %main_entry = OpLabel @@ -200,6 +235,31 @@ TEST_F(ValidateAtomics, AtomicLoadVulkanSuccess) { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_0)); } +TEST_F(ValidateAtomics, AtomicStoreOpenCLFunctionPointerStorageTypeSuccess) { + const std::string body = R"( +%f32_var_function = OpVariable %f32_ptr_function Function +OpAtomicStore %f32_var_function %device %relaxed %f32_1 +)"; + + CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_OPENCL_1_2); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_OPENCL_1_2)); +} + +TEST_F(ValidateAtomics, AtomicStoreVulkanFunctionPointerStorageType) { + const std::string body = R"( +%f32_var_function = OpVariable %f32_ptr_function Function +OpAtomicStore %f32_var_function %device %relaxed %f32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("AtomicStore: expected Pointer Storage Class to be Uniform, " + "Workgroup, CrossWorkgroup, Generic, AtomicCounter, Image or " + "StorageBuffer")); +} + // TODO(atgoo@github.com): the corresponding check fails Vulkan CTS, // reenable once fixed. TEST_F(ValidateAtomics, DISABLED_AtomicLoadVulkanSubgroup) { @@ -272,9 +332,85 @@ TEST_F(ValidateAtomics, AtomicLoadVulkanInt64) { CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_0); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicLoad: according to the Vulkan spec atomic " - "Result Type needs to be a 32-bit int scalar type")); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "AtomicLoad: 64-bit atomics require the Int64Atomics capability")); +} + +TEST_F(ValidateAtomics, AtomicLoadWebGPUShaderSuccess) { + const std::string body = R"( +%val1 = OpAtomicLoad %u32 %u32_var %device %relaxed +%val2 = OpAtomicLoad %u32 %u32_var %workgroup %acquire +)"; + + CompileSuccessfully(GenerateWebGPUShaderCode(body), SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateAtomics, AtomicLoadWebGPUShaderSequentiallyConsistentFailure) { + const std::string body = R"( +%val3 = OpAtomicLoad %u32 %u32_var %subgroup %sequentially_consistent +)"; + + CompileSuccessfully(GenerateWebGPUShaderCode(body), SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "WebGPU spec disallows any bit masks in Memory Semantics that are " + "not Acquire, Release, AcquireRelease, UniformMemory, " + "WorkgroupMemory, ImageMemory, OutputMemoryKHR, MakeAvailableKHR, or " + "MakeVisibleKHR\n %34 = OpAtomicLoad %uint %29 %uint_3 %uint_16\n")); +} + +TEST_F(ValidateAtomics, VK_KHR_shader_atomic_int64Success) { + const std::string body = R"( +%val1 = OpAtomicUMin %u64 %u64_var %device %relaxed %u64_1 +%val2 = OpAtomicUMax %u64 %u64_var %device %relaxed %u64_1 +%val3 = OpAtomicSMin %u64 %u64_var %device %relaxed %u64_1 +%val4 = OpAtomicSMax %u64 %u64_var %device %relaxed %u64_1 +%val5 = OpAtomicAnd %u64 %u64_var %device %relaxed %u64_1 +%val6 = OpAtomicOr %u64 %u64_var %device %relaxed %u64_1 +%val7 = OpAtomicXor %u64 %u64_var %device %relaxed %u64_1 +%val8 = OpAtomicIAdd %u64 %u64_var %device %relaxed %u64_1 +%val9 = OpAtomicExchange %u64 %u64_var %device %relaxed %u64_1 +%val10 = OpAtomicCompareExchange %u64 %u64_var %device %relaxed %relaxed %u64_1 %u64_1 + +%val11 = OpAtomicUMin %s64 %s64_var %device %relaxed %s64_1 +%val12 = OpAtomicUMax %s64 %s64_var %device %relaxed %s64_1 +%val13 = OpAtomicSMin %s64 %s64_var %device %relaxed %s64_1 +%val14 = OpAtomicSMax %s64 %s64_var %device %relaxed %s64_1 +%val15 = OpAtomicAnd %s64 %s64_var %device %relaxed %s64_1 +%val16 = OpAtomicOr %s64 %s64_var %device %relaxed %s64_1 +%val17 = OpAtomicXor %s64 %s64_var %device %relaxed %s64_1 +%val18 = OpAtomicIAdd %s64 %s64_var %device %relaxed %s64_1 +%val19 = OpAtomicExchange %s64 %s64_var %device %relaxed %s64_1 +%val20 = OpAtomicCompareExchange %s64 %s64_var %device %relaxed %relaxed %s64_1 %s64_1 + +%val21 = OpAtomicLoad %u64 %u64_var %device %relaxed +%val22 = OpAtomicLoad %s64 %s64_var %device %relaxed + +OpAtomicStore %u64_var %device %relaxed %u64_1 +OpAtomicStore %s64_var %device %relaxed %s64_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body, "OpCapability Int64Atomics\n"), + SPV_ENV_VULKAN_1_0); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_0)); +} + +TEST_F(ValidateAtomics, VK_KHR_shader_atomic_int64MissingCapability) { + const std::string body = R"( +%val1 = OpAtomicUMin %u64 %u64_var %device %relaxed %u64_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "AtomicUMin: 64-bit atomics require the Int64Atomics capability")); } TEST_F(ValidateAtomics, AtomicLoadWrongResultType) { @@ -295,10 +431,9 @@ TEST_F(ValidateAtomics, AtomicLoadWrongPointerType) { )"; CompileSuccessfully(GenerateKernelCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("AtomicLoad: expected Pointer to be of type OpTypePointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 27[%_ptr_Workgroup_float] cannot be a type")); } TEST_F(ValidateAtomics, AtomicLoadWrongPointerDataType) { @@ -321,8 +456,10 @@ TEST_F(ValidateAtomics, AtomicLoadWrongScopeType) { CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicLoad: expected Scope to be 32-bit int")); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("AtomicLoad: expected Memory Scope to be a 32-bit int\n %40 = " + "OpAtomicLoad %float %28 %float_1 %uint_0_1\n")); } TEST_F(ValidateAtomics, AtomicLoadWrongMemorySemanticsType) { @@ -334,7 +471,7 @@ TEST_F(ValidateAtomics, AtomicLoadWrongMemorySemanticsType) { ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("AtomicLoad: expected Memory Semantics to be 32-bit int")); + HasSubstr("AtomicLoad: expected Memory Semantics to be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicStoreKernelSuccess) { @@ -405,6 +542,31 @@ OpAtomicStore %u32_var %device %sequentially_consistent %u32_1 "Acquire, AcquireRelease and SequentiallyConsistent")); } +TEST_F(ValidateAtomics, AtomicStoreWebGPUSuccess) { + const std::string body = R"( +OpAtomicStore %u32_var %device %release %u32_1 +)"; + + CompileSuccessfully(GenerateWebGPUShaderCode(body), SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateAtomics, AtomicStoreWebGPUSequentiallyConsistent) { + const std::string body = R"( +OpAtomicStore %u32_var %device %sequentially_consistent %u32_1 +)"; + + CompileSuccessfully(GenerateWebGPUShaderCode(body), SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "WebGPU spec disallows any bit masks in Memory Semantics that are " + "not Acquire, Release, AcquireRelease, UniformMemory, " + "WorkgroupMemory, ImageMemory, OutputMemoryKHR, MakeAvailableKHR, or " + "MakeVisibleKHR\n OpAtomicStore %29 %uint_1_0 %uint_16 %uint_1\n")); +} + TEST_F(ValidateAtomics, AtomicStoreWrongPointerType) { const std::string body = R"( OpAtomicStore %f32_1 %device %relaxed %f32_1 @@ -433,8 +595,7 @@ OpAtomicStore %f32vec4_var %device %relaxed %f32_1 TEST_F(ValidateAtomics, AtomicStoreWrongPointerStorageType) { const std::string body = R"( -%f32_var_function = OpVariable %f32_ptr_function Function -OpAtomicStore %f32_var_function %device %relaxed %f32_1 +OpAtomicStore %f32_uc_var %device %relaxed %f32_1 )"; CompileSuccessfully(GenerateKernelCode(body)); @@ -453,8 +614,10 @@ OpAtomicStore %f32_var %f32_1 %relaxed %f32_1 CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicStore: expected Scope to be 32-bit int")); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("AtomicStore: expected Memory Scope to be a 32-bit int\n " + "OpAtomicStore %28 %float_1 %uint_0_1 %float_1\n")); } TEST_F(ValidateAtomics, AtomicStoreWrongMemorySemanticsType) { @@ -466,7 +629,7 @@ OpAtomicStore %f32_var %device %f32_1 %f32_1 ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("AtomicStore: expected Memory Semantics to be 32-bit int")); + HasSubstr("AtomicStore: expected Memory Semantics to be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicStoreWrongValueType) { @@ -537,11 +700,10 @@ TEST_F(ValidateAtomics, AtomicExchangeWrongPointerType) { )"; CompileSuccessfully(GenerateKernelCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr( - "AtomicExchange: expected Pointer to be of type OpTypePointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 33[%_ptr_Workgroup_v4float] cannot be a " + "type")); } TEST_F(ValidateAtomics, AtomicExchangeWrongPointerDataType) { @@ -566,8 +728,11 @@ OpAtomicStore %f32_var %device %relaxed %f32_1 CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicExchange: expected Scope to be 32-bit int")); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "AtomicExchange: expected Memory Scope to be a 32-bit int\n %40 = " + "OpAtomicExchange %float %28 %float_1 %uint_0_1 %float_0\n")); } TEST_F(ValidateAtomics, AtomicExchangeWrongMemorySemanticsType) { @@ -580,7 +745,8 @@ OpAtomicStore %f32_var %device %relaxed %f32_1 ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("AtomicExchange: expected Memory Semantics to be 32-bit int")); + HasSubstr( + "AtomicExchange: expected Memory Semantics to be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicExchangeWrongValueType) { @@ -650,10 +816,10 @@ TEST_F(ValidateAtomics, AtomicCompareExchangeWrongPointerType) { )"; CompileSuccessfully(GenerateKernelCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicCompareExchange: expected Pointer to be of type " - "OpTypePointer")); + HasSubstr("Operand 33[%_ptr_Workgroup_v4float] cannot be a " + "type")); } TEST_F(ValidateAtomics, AtomicCompareExchangeWrongPointerDataType) { @@ -680,7 +846,9 @@ OpAtomicStore %f32_var %device %relaxed %f32_1 ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("AtomicCompareExchange: expected Scope to be 32-bit int")); + HasSubstr("AtomicCompareExchange: expected Memory Scope to be a 32-bit " + "int\n %40 = OpAtomicCompareExchange %float %28 %float_1 " + "%uint_0_1 %uint_0_1 %float_0 %float_0\n")); } TEST_F(ValidateAtomics, AtomicCompareExchangeWrongMemorySemanticsType1) { @@ -691,10 +859,9 @@ OpAtomicStore %f32_var %device %relaxed %f32_1 CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr( - "AtomicCompareExchange: expected Memory Semantics to be 32-bit int")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicCompareExchange: expected Memory Semantics to " + "be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicCompareExchangeWrongMemorySemanticsType2) { @@ -705,10 +872,9 @@ OpAtomicStore %f32_var %device %relaxed %f32_1 CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr( - "AtomicCompareExchange: expected Memory Semantics to be 32-bit int")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicCompareExchange: expected Memory Semantics to " + "be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicCompareExchangeUnequalRelease) { @@ -860,9 +1026,11 @@ TEST_F(ValidateAtomics, AtomicFlagTestAndSetWrongScopeType) { CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicFlagTestAndSet: " - "expected Scope to be 32-bit int")); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "AtomicFlagTestAndSet: expected Memory Scope to be a 32-bit int\n " + "%40 = OpAtomicFlagTestAndSet %bool %30 %ulong_1 %uint_0_1\n")); } TEST_F(ValidateAtomics, AtomicFlagTestAndSetWrongMemorySemanticsType) { @@ -874,7 +1042,7 @@ TEST_F(ValidateAtomics, AtomicFlagTestAndSetWrongMemorySemanticsType) { ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("AtomicFlagTestAndSet: " - "expected Memory Semantics to be 32-bit int")); + "expected Memory Semantics to be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicFlagClearAcquire) { @@ -935,7 +1103,8 @@ OpAtomicFlagClear %u32_var %u64_1 %relaxed CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicFlagClear: expected Scope to be 32-bit int")); + HasSubstr("AtomicFlagClear: expected Memory Scope to be a 32-bit " + "int\n OpAtomicFlagClear %30 %ulong_1 %uint_0_1\n")); } TEST_F(ValidateAtomics, AtomicFlagClearWrongMemorySemanticsType) { @@ -947,7 +1116,8 @@ OpAtomicFlagClear %u32_var %device %u64_1 ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("AtomicFlagClear: expected Memory Semantics to be 32-bit int")); + HasSubstr( + "AtomicFlagClear: expected Memory Semantics to be a 32-bit int")); } TEST_F(ValidateAtomics, AtomicIIncrementAcquireAndRelease) { @@ -958,11 +1128,11 @@ OpAtomicStore %u32_var %device %relaxed %u32_1 CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("AtomicIIncrement: no more than one of the following Memory " - "Semantics bits can be set at the same time: Acquire, Release, " - "AcquireRelease or SequentiallyConsistent")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicIIncrement: Memory Semantics can have at most " + "one of the following bits set: Acquire, Release, " + "AcquireRelease or SequentiallyConsistent\n %40 = " + "OpAtomicIIncrement %uint %30 %uint_1_0 %uint_6\n")); } TEST_F(ValidateAtomics, AtomicUniformMemorySemanticsShader) { @@ -988,17 +1158,17 @@ OpAtomicStore %u32_var %device %relaxed %u32_1 "requires capability Shader")); } +// Lack of the AtomicStorage capability is intentionally ignored, see +// https://github.com/KhronosGroup/glslang/issues/1618 for the reasoning why. TEST_F(ValidateAtomics, AtomicCounterMemorySemanticsNoCapability) { const std::string body = R"( -OpAtomicStore %u32_var %device %relaxed %u32_1 -%val1 = OpAtomicIIncrement %u32 %u32_var %device %acquire_release_atomic_counter_workgroup + OpAtomicStore %u32_var %device %relaxed %u32_1 +%val1 = OpAtomicIIncrement %u32 %u32_var %device +%acquire_release_atomic_counter_workgroup )"; CompileSuccessfully(GenerateKernelCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("AtomicIIncrement: Memory Semantics UniformMemory " - "requires capability AtomicStorage")); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); } TEST_F(ValidateAtomics, AtomicCounterMemorySemanticsWithCapability) { @@ -1011,6 +1181,683 @@ OpAtomicStore %u32_var %device %relaxed %u32_1 ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); } +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicLoad) { + const std::string body = R"( +%ld = OpAtomicLoad %u32 %u32_var %workgroup %sequentially_consistent +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicStore) { + const std::string body = R"( +OpAtomicStore %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, + VulkanMemoryModelBanSequentiallyConsistentAtomicExchange) { + const std::string body = R"( +%ex = OpAtomicExchange %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, + VulkanMemoryModelBanSequentiallyConsistentAtomicCompareExchangeEqual) { + const std::string body = R"( +%ex = OpAtomicCompareExchange %u32 %u32_var %workgroup %sequentially_consistent %relaxed %u32_0 %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, + VulkanMemoryModelBanSequentiallyConsistentAtomicCompareExchangeUnequal) { + const std::string body = R"( +%ex = OpAtomicCompareExchange %u32 %u32_var %workgroup %relaxed %sequentially_consistent %u32_0 %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, + VulkanMemoryModelBanSequentiallyConsistentAtomicIIncrement) { + const std::string body = R"( +%inc = OpAtomicIIncrement %u32 %u32_var %workgroup %sequentially_consistent +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, + VulkanMemoryModelBanSequentiallyConsistentAtomicIDecrement) { + const std::string body = R"( +%dec = OpAtomicIDecrement %u32 %u32_var %workgroup %sequentially_consistent +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicIAdd) { + const std::string body = R"( +%add = OpAtomicIAdd %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicISub) { + const std::string body = R"( +%sub = OpAtomicISub %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicSMin) { + const std::string body = R"( +%min = OpAtomicSMin %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicUMin) { + const std::string body = R"( +%min = OpAtomicUMin %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicSMax) { + const std::string body = R"( +%max = OpAtomicSMax %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicUMax) { + const std::string body = R"( +%max = OpAtomicUMax %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicAnd) { + const std::string body = R"( +%and = OpAtomicAnd %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicOr) { + const std::string body = R"( +%or = OpAtomicOr %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelBanSequentiallyConsistentAtomicXor) { + const std::string body = R"( +%xor = OpAtomicXor %u32 %u32_var %workgroup %sequentially_consistent %u32_0 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateAtomics, OutputMemoryKHRRequiresVulkanMemoryModelKHR) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 4100 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpAtomicStore %var %workgroup %semantics %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicStore: Memory Semantics OutputMemoryKHR " + "requires capability VulkanMemoryModelKHR")); +} + +TEST_F(ValidateAtomics, MakeAvailableKHRRequiresVulkanMemoryModelKHR) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 8196 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpAtomicStore %var %workgroup %semantics %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicStore: Memory Semantics MakeAvailableKHR " + "requires capability VulkanMemoryModelKHR")); +} + +TEST_F(ValidateAtomics, MakeVisibleKHRRequiresVulkanMemoryModelKHR) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 16386 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +%ld = OpAtomicLoad %3 %var %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicLoad: Memory Semantics MakeVisibleKHR requires " + "capability VulkanMemoryModelKHR")); +} + +TEST_F(ValidateAtomics, MakeAvailableKHRRequiresReleaseSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 8448 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpAtomicStore %var %workgroup %semantics %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("AtomicStore: MakeAvailableKHR Memory Semantics also requires " + "either Release or AcquireRelease Memory Semantics")); +} + +TEST_F(ValidateAtomics, MakeVisibleKHRRequiresAcquireSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 16640 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +%ld = OpAtomicLoad %3 %var %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("AtomicLoad: MakeVisibleKHR Memory Semantics also requires " + "either Acquire or AcquireRelease Memory Semantics")); +} + +TEST_F(ValidateAtomics, MakeAvailableKHRRequiresStorageSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 8196 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpAtomicStore %var %workgroup %semantics %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "AtomicStore: expected Memory Semantics to include a storage class")); +} + +TEST_F(ValidateAtomics, MakeVisibleKHRRequiresStorageSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 16386 +%5 = OpTypeFunction %2 +%workgroup = OpConstant %3 2 +%ptr = OpTypePointer Workgroup %3 +%var = OpVariable %ptr Workgroup +%1 = OpFunction %2 None %5 +%7 = OpLabel +%ld = OpAtomicLoad %3 %var %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "AtomicLoad: expected Memory Semantics to include a storage class")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelAllowsQueueFamilyKHR) { + const std::string body = R"( +%val = OpAtomicAnd %u32 %u32_var %queuefamily %relaxed %u32_1 +)"; + + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateAtomics, NonVulkanMemoryModelDisallowsQueueFamilyKHR) { + const std::string body = R"( +%val = OpAtomicAnd %u32 %u32_var %queuefamily %relaxed %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("AtomicAnd: Memory Scope QueueFamilyKHR requires " + "capability VulkanMemoryModelKHR\n %42 = OpAtomicAnd " + "%uint %29 %uint_5 %uint_0_1 %uint_1\n")); +} + +TEST_F(ValidateAtomics, SemanticsSpecConstantShader) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%spec_const = OpSpecConstant %int 0 +%workgroup = OpConstant %int 2 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%ld = OpAtomicLoad %int %var %workgroup %spec_const +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Memory Semantics ids must be OpConstant when Shader " + "capability is present")); +} + +TEST_F(ValidateAtomics, SemanticsSpecConstantKernel) { + const std::string spirv = R"( +OpCapability Kernel +OpCapability Linkage +OpMemoryModel Logical OpenCL +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%spec_const = OpSpecConstant %int 0 +%workgroup = OpConstant %int 2 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%ld = OpAtomicLoad %int %var %workgroup %spec_const +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateAtomics, ScopeSpecConstantShader) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%spec_const = OpSpecConstant %int 0 +%relaxed = OpConstant %int 0 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%ld = OpAtomicLoad %int %var %spec_const %relaxed +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Scope ids must be OpConstant when Shader capability is present")); +} + +TEST_F(ValidateAtomics, ScopeSpecConstantKernel) { + const std::string spirv = R"( +OpCapability Kernel +OpCapability Linkage +OpMemoryModel Logical OpenCL +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%spec_const = OpSpecConstant %int 0 +%relaxed = OpConstant %int 0 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%ld = OpAtomicLoad %int %var %spec_const %relaxed +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelDeviceScopeBad) { + const std::string body = R"( +%val = OpAtomicAnd %u32 %u32_var %device %relaxed %u32_1 +)"; + + const std::string extra = R"(OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateAtomics, VulkanMemoryModelDeviceScopeGood) { + const std::string body = R"( +%val = OpAtomicAnd %u32 %u32_var %device %relaxed %u32_1 +)"; + + const std::string extra = R"(OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + + CompileSuccessfully(GenerateShaderCode(body, extra, "VulkanKHR"), + SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_barriers_test.cpp b/3rdparty/spirv-tools/test/val/val_barriers_test.cpp index 38c168eda..264d130bd 100644 --- a/3rdparty/spirv-tools/test/val/val_barriers_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_barriers_test.cpp @@ -28,19 +28,26 @@ using ::testing::Not; using ValidateBarriers = spvtest::ValidateBase; -std::string GenerateShaderCode( - const std::string& body, - const std::string& capabilities_and_extensions = "", - const std::string& execution_model = "GLCompute") { +std::string GenerateShaderCodeImpl( + const std::string& body, const std::string& capabilities_and_extensions, + const std::string& definitions, const std::string& execution_model, + const std::string& memory_model) { std::ostringstream ss; ss << R"( OpCapability Shader -OpCapability Int64 )"; ss << capabilities_and_extensions; - ss << "OpMemoryModel Logical GLSL450\n"; + ss << memory_model << std::endl; ss << "OpEntryPoint " << execution_model << " %main \"main\"\n"; + if (execution_model == "Fragment") { + ss << "OpExecutionMode %main OriginUpperLeft\n"; + } else if (execution_model == "Geometry") { + ss << "OpExecutionMode %main InputPoints\n"; + ss << "OpExecutionMode %main OutputPoints\n"; + } else if (execution_model == "GLCompute") { + ss << "OpExecutionMode %main LocalSize 1 1 1\n"; + } ss << R"( %void = OpTypeVoid @@ -48,21 +55,21 @@ OpCapability Int64 %bool = OpTypeBool %f32 = OpTypeFloat 32 %u32 = OpTypeInt 32 0 -%u64 = OpTypeInt 64 0 %f32_0 = OpConstant %f32 0 %f32_1 = OpConstant %f32 1 %u32_0 = OpConstant %u32 0 %u32_1 = OpConstant %u32 1 %u32_4 = OpConstant %u32 4 -%u64_0 = OpConstant %u64 0 -%u64_1 = OpConstant %u64 1 - +)"; + ss << definitions; + ss << R"( %cross_device = OpConstant %u32 0 %device = OpConstant %u32 1 %workgroup = OpConstant %u32 2 %subgroup = OpConstant %u32 3 %invocation = OpConstant %u32 4 +%queuefamily = OpConstant %u32 5 %none = OpConstant %u32 0 %acquire = OpConstant %u32 2 @@ -88,6 +95,42 @@ OpFunctionEnd)"; return ss.str(); } +std::string GenerateShaderCode( + const std::string& body, + const std::string& capabilities_and_extensions = "", + const std::string& execution_model = "GLCompute") { + const std::string int64_capability = R"( +OpCapability Int64 +)"; + const std::string int64_declarations = R"( +%u64 = OpTypeInt 64 0 +%u64_0 = OpConstant %u64 0 +%u64_1 = OpConstant %u64 1 +)"; + const std::string memory_model = "OpMemoryModel Logical GLSL450"; + return GenerateShaderCodeImpl( + body, int64_capability + capabilities_and_extensions, int64_declarations, + execution_model, memory_model); +} + +std::string GenerateWebGPUShaderCode( + const std::string& body, + const std::string& capabilities_and_extensions = "", + const std::string& execution_model = "GLCompute") { + const std::string vulkan_memory_capability = R"( +OpCapability VulkanMemoryModelKHR +)"; + const std::string vulkan_memory_extension = R"( +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + const std::string memory_model = "OpMemoryModel Logical VulkanKHR"; + return GenerateShaderCodeImpl(body, + vulkan_memory_capability + + capabilities_and_extensions + + vulkan_memory_extension, + "", execution_model, memory_model); +} + std::string GenerateKernelCode( const std::string& body, const std::string& capabilities_and_extensions = "") { @@ -132,9 +175,7 @@ OpMemoryModel Physical32 OpenCL %acquire_release = OpConstant %u32 8 %acquire_and_release = OpConstant %u32 6 %sequentially_consistent = OpConstant %u32 16 -%acquire_release_uniform_workgroup = OpConstant %u32 328 -%acquire_and_release_uniform = OpConstant %u32 70 -%uniform = OpConstant %u32 64 +%acquire_release_workgroup = OpConstant %u32 264 %named_barrier = OpTypeNamedBarrier @@ -172,7 +213,7 @@ OpControlBarrier %workgroup %workgroup %acquire OpControlBarrier %workgroup %device %release OpControlBarrier %cross_device %cross_device %acquire_release OpControlBarrier %cross_device %cross_device %sequentially_consistent -OpControlBarrier %cross_device %cross_device %acquire_release_uniform_workgroup +OpControlBarrier %cross_device %cross_device %acquire_release_workgroup )"; CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_UNIVERSAL_1_1); @@ -204,6 +245,16 @@ OpControlBarrier %workgroup %workgroup %acquire_release_uniform_workgroup ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_0)); } +TEST_F(ValidateBarriers, OpControlBarrierWebGPUSuccess) { + const std::string body = R"( +OpControlBarrier %workgroup %queuefamily %none +OpControlBarrier %workgroup %workgroup %acquire_release_uniform_workgroup +)"; + + CompileSuccessfully(GenerateWebGPUShaderCode(body), SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + TEST_F(ValidateBarriers, OpControlBarrierExecutionModelFragmentSpirv12) { const std::string body = R"( OpControlBarrier %device %device %none @@ -314,6 +365,18 @@ OpControlBarrier %device %workgroup %none "is limited to Workgroup and Subgroup")); } +TEST_F(ValidateBarriers, OpControlBarrierWebGPUExecutionScopeDevice) { + const std::string body = R"( +OpControlBarrier %device %workgroup %none +)"; + + CompileSuccessfully(GenerateWebGPUShaderCode(body), SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ControlBarrier: in WebGPU environment Execution Scope " + "is limited to Workgroup and Subgroup")); +} + TEST_F(ValidateBarriers, OpControlBarrierVulkanMemoryScopeSubgroup) { const std::string body = R"( OpControlBarrier %subgroup %subgroup %none @@ -550,8 +613,8 @@ OpMemoryBarrier %device %uniform TEST_F(ValidateBarriers, OpMemoryBarrierKernelSuccess) { const std::string body = R"( -OpMemoryBarrier %cross_device %acquire_release_uniform_workgroup -OpMemoryBarrier %device %uniform +OpMemoryBarrier %cross_device %acquire_release_workgroup +OpMemoryBarrier %device %none )"; CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_UNIVERSAL_1_1); @@ -739,7 +802,7 @@ TEST_F(ValidateBarriers, OpNamedBarrierInitializeU64SubgroupCount) { TEST_F(ValidateBarriers, OpMemoryNamedBarrierSuccess) { const std::string body = R"( %barrier = OpNamedBarrierInitialize %named_barrier %u32_4 -OpMemoryNamedBarrier %barrier %workgroup %acquire_release_uniform_workgroup +OpMemoryNamedBarrier %barrier %workgroup %acquire_release_workgroup )"; CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_UNIVERSAL_1_1); @@ -748,7 +811,7 @@ OpMemoryNamedBarrier %barrier %workgroup %acquire_release_uniform_workgroup TEST_F(ValidateBarriers, OpMemoryNamedBarrierNotNamedBarrier) { const std::string body = R"( -OpMemoryNamedBarrier %u32_1 %workgroup %acquire_release_uniform_workgroup +OpMemoryNamedBarrier %u32_1 %workgroup %acquire_release_workgroup )"; CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_UNIVERSAL_1_1); @@ -762,7 +825,7 @@ OpMemoryNamedBarrier %u32_1 %workgroup %acquire_release_uniform_workgroup TEST_F(ValidateBarriers, OpMemoryNamedBarrierFloatMemoryScope) { const std::string body = R"( %barrier = OpNamedBarrierInitialize %named_barrier %u32_4 -OpMemoryNamedBarrier %barrier %f32_1 %acquire_release_uniform_workgroup +OpMemoryNamedBarrier %barrier %f32_1 %acquire_release_workgroup )"; CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_UNIVERSAL_1_1); @@ -792,7 +855,7 @@ OpMemoryNamedBarrier %barrier %workgroup %f32_0 TEST_F(ValidateBarriers, OpMemoryNamedBarrierAcquireAndRelease) { const std::string body = R"( %barrier = OpNamedBarrierInitialize %named_barrier %u32_4 -OpMemoryNamedBarrier %barrier %workgroup %acquire_and_release_uniform +OpMemoryNamedBarrier %barrier %workgroup %acquire_and_release )"; CompileSuccessfully(GenerateKernelCode(body), SPV_ENV_UNIVERSAL_1_1); @@ -810,10 +873,410 @@ OpMemoryBarrier %u32 %u32_0 )"; CompileSuccessfully(GenerateKernelCode(body)); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 5[%uint] cannot be a " + "type")); +} + +TEST_F(ValidateBarriers, + OpControlBarrierVulkanMemoryModelBanSequentiallyConsistent) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%4 = OpConstant %3 16 +%5 = OpTypeFunction %2 +%6 = OpConstant %3 5 +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpControlBarrier %6 %6 %4 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateBarriers, + OpMemoryBarrierVulkanMemoryModelBanSequentiallyConsistent) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%4 = OpConstant %3 16 +%5 = OpTypeFunction %2 +%6 = OpConstant %3 5 +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpMemoryBarrier %6 %4 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("SequentiallyConsistent memory semantics cannot be " + "used with the VulkanKHR memory model.")); +} + +TEST_F(ValidateBarriers, OutputMemoryKHRRequireVulkanMemoryModelKHR) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 4104 +%5 = OpTypeFunction %2 +%device = OpConstant %3 1 +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpControlBarrier %device %device %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ControlBarrier: Memory Semantics OutputMemoryKHR " + "requires capability VulkanMemoryModelKHR")); +} + +TEST_F(ValidateBarriers, MakeAvailableKHRRequireVulkanMemoryModelKHR) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 8264 +%5 = OpTypeFunction %2 +%device = OpConstant %3 1 +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpControlBarrier %device %device %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ControlBarrier: Memory Semantics MakeAvailableKHR " + "requires capability VulkanMemoryModelKHR")); +} + +TEST_F(ValidateBarriers, MakeVisibleKHRRequireVulkanMemoryModelKHR) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft +%2 = OpTypeVoid +%3 = OpTypeInt 32 0 +%semantics = OpConstant %3 16456 +%5 = OpTypeFunction %2 +%device = OpConstant %3 1 +%1 = OpFunction %2 None %5 +%7 = OpLabel +OpControlBarrier %device %device %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ControlBarrier: Memory Semantics MakeVisibleKHR " + "requires capability VulkanMemoryModelKHR")); +} + +TEST_F(ValidateBarriers, MakeAvailableKHRRequiresReleaseSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%workgroup = OpConstant %int 2 +%semantics = OpConstant %int 8448 +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpControlBarrier %workgroup %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); EXPECT_THAT( getDiagnosticString(), - HasSubstr("MemoryBarrier: expected Memory Scope to be a 32-bit int")); + HasSubstr("ControlBarrier: MakeAvailableKHR Memory Semantics also " + "requires either Release or AcquireRelease Memory Semantics")); +} + +TEST_F(ValidateBarriers, MakeVisibleKHRRequiresAcquireSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%workgroup = OpConstant %int 2 +%semantics = OpConstant %int 16640 +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpControlBarrier %workgroup %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("ControlBarrier: MakeVisibleKHR Memory Semantics also requires " + "either Acquire or AcquireRelease Memory Semantics")); +} + +TEST_F(ValidateBarriers, MakeAvailableKHRRequiresStorageSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%workgroup = OpConstant %int 2 +%semantics = OpConstant %int 8196 +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpMemoryBarrier %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("MemoryBarrier: expected Memory Semantics to include a " + "storage class")); +} + +TEST_F(ValidateBarriers, MakeVisibleKHRRequiresStorageSemantics) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%workgroup = OpConstant %int 2 +%semantics = OpConstant %int 16386 +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpMemoryBarrier %workgroup %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("MemoryBarrier: expected Memory Semantics to include a " + "storage class")); +} + +TEST_F(ValidateBarriers, SemanticsSpecConstantShader) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%spec_const = OpSpecConstant %int 0 +%workgroup = OpConstant %int 2 +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpMemoryBarrier %workgroup %spec_const +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Memory Semantics ids must be OpConstant when Shader " + "capability is present")); +} + +TEST_F(ValidateBarriers, SemanticsSpecConstantKernel) { + const std::string spirv = R"( +OpCapability Kernel +OpCapability Linkage +OpMemoryModel Logical OpenCL +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%spec_const = OpSpecConstant %int 0 +%workgroup = OpConstant %int 2 +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpMemoryBarrier %workgroup %spec_const +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateBarriers, ScopeSpecConstantShader) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%spec_const = OpSpecConstant %int 0 +%relaxed = OpConstant %int 0 +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpMemoryBarrier %spec_const %relaxed +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Scope ids must be OpConstant when Shader " + "capability is present")); +} + +TEST_F(ValidateBarriers, ScopeSpecConstantKernel) { + const std::string spirv = R"( +OpCapability Kernel +OpCapability Linkage +OpMemoryModel Logical OpenCL +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%ptr_int_workgroup = OpTypePointer Workgroup %int +%var = OpVariable %ptr_int_workgroup Workgroup +%voidfn = OpTypeFunction %void +%spec_const = OpSpecConstant %int 0 +%relaxed = OpConstant %int 0 +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpMemoryBarrier %spec_const %relaxed +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateBarriers, VulkanMemoryModelDeviceScopeBad) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%semantics = OpConstant %int 0 +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpMemoryBarrier %device %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateBarriers, VulkanMemoryModelDeviceScopeGood) { + const std::string text = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%semantics = OpConstant %int 0 +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpMemoryBarrier %device %semantics +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } } // namespace diff --git a/3rdparty/spirv-tools/test/val/val_bitwise_test.cpp b/3rdparty/spirv-tools/test/val/val_bitwise_test.cpp index 18ccd4f8e..1001def8f 100644 --- a/3rdparty/spirv-tools/test/val/val_bitwise_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_bitwise_test.cpp @@ -42,6 +42,7 @@ OpCapability Float64)"; R"( OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %func = OpTypeFunction %void %bool = OpTypeBool diff --git a/3rdparty/spirv-tools/test/val/val_builtins_test.cpp b/3rdparty/spirv-tools/test/val/val_builtins_test.cpp index 0c8909cec..ec0758275 100644 --- a/3rdparty/spirv-tools/test/val/val_builtins_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_builtins_test.cpp @@ -243,10 +243,20 @@ TEST_P(ValidateVulkanCombineBuiltInExecutionModelDataTypeResult, InMain) { if (0 == std::strcmp(execution_model, "Fragment")) { execution_modes << "OpExecutionMode %" << entry_point.name << " OriginUpperLeft\n"; + if (0 == std::strcmp(built_in, "FragDepth")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " DepthReplacing\n"; + } } - if (0 == std::strcmp(built_in, "FragDepth")) { + if (0 == std::strcmp(execution_model, "Geometry")) { execution_modes << "OpExecutionMode %" << entry_point.name - << " DepthReplacing\n"; + << " InputPoints\n"; + execution_modes << "OpExecutionMode %" << entry_point.name + << " OutputPoints\n"; + } + if (0 == std::strcmp(execution_model, "GLCompute")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " LocalSize 1 1 1\n"; } entry_point.execution_modes = execution_modes.str(); @@ -300,10 +310,20 @@ TEST_P(ValidateVulkanCombineBuiltInExecutionModelDataTypeResult, InFunction) { if (0 == std::strcmp(execution_model, "Fragment")) { execution_modes << "OpExecutionMode %" << entry_point.name << " OriginUpperLeft\n"; + if (0 == std::strcmp(built_in, "FragDepth")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " DepthReplacing\n"; + } } - if (0 == std::strcmp(built_in, "FragDepth")) { + if (0 == std::strcmp(execution_model, "Geometry")) { execution_modes << "OpExecutionMode %" << entry_point.name - << " DepthReplacing\n"; + << " InputPoints\n"; + execution_modes << "OpExecutionMode %" << entry_point.name + << " OutputPoints\n"; + } + if (0 == std::strcmp(execution_model, "GLCompute")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " LocalSize 1 1 1\n"; } entry_point.execution_modes = execution_modes.str(); @@ -366,10 +386,20 @@ TEST_P(ValidateVulkanCombineBuiltInExecutionModelDataTypeResult, Variable) { if (0 == std::strcmp(execution_model, "Fragment")) { execution_modes << "OpExecutionMode %" << entry_point.name << " OriginUpperLeft\n"; + if (0 == std::strcmp(built_in, "FragDepth")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " DepthReplacing\n"; + } } - if (0 == std::strcmp(built_in, "FragDepth")) { + if (0 == std::strcmp(execution_model, "Geometry")) { execution_modes << "OpExecutionMode %" << entry_point.name - << " DepthReplacing\n"; + << " InputPoints\n"; + execution_modes << "OpExecutionMode %" << entry_point.name + << " OutputPoints\n"; + } + if (0 == std::strcmp(execution_model, "GLCompute")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " LocalSize 1 1 1\n"; } entry_point.execution_modes = execution_modes.str(); @@ -416,6 +446,16 @@ INSTANTIATE_TEST_CASE_P( "execution model is Fragment.", "which is called with execution model Fragment."))), ); +INSTANTIATE_TEST_CASE_P( + VertexIdAndInstanceIdVertexInput, + ValidateVulkanCombineBuiltInExecutionModelDataTypeResult, + Combine(Values("VertexId", "InstanceId"), Values("Vertex"), Values("Input"), + Values("%u32"), + Values(TestResult( + SPV_ERROR_INVALID_DATA, + "Vulkan spec doesn't allow BuiltIn VertexId/InstanceId to be " + "used."))), ); + INSTANTIATE_TEST_CASE_P( ClipAndCullDistanceVertexInput, ValidateVulkanCombineBuiltInExecutionModelDataTypeResult, @@ -1163,7 +1203,7 @@ INSTANTIATE_TEST_CASE_P( INSTANTIATE_TEST_CASE_P( SampleMaskWrongStorageClass, ValidateVulkanCombineBuiltInExecutionModelDataTypeResult, - Combine(Values("SampleMask"), Values("Fragment"), Values("UniformConstant"), + Combine(Values("SampleMask"), Values("Fragment"), Values("Workgroup"), Values("%u32arr2"), Values(TestResult( SPV_ERROR_INVALID_DATA, @@ -1542,10 +1582,20 @@ TEST_P(ValidateVulkanCombineBuiltInArrayedVariable, Variable) { if (0 == std::strcmp(execution_model, "Fragment")) { execution_modes << "OpExecutionMode %" << entry_point.name << " OriginUpperLeft\n"; + if (0 == std::strcmp(built_in, "FragDepth")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " DepthReplacing\n"; + } } - if (0 == std::strcmp(built_in, "FragDepth")) { + if (0 == std::strcmp(execution_model, "Geometry")) { execution_modes << "OpExecutionMode %" << entry_point.name - << " DepthReplacing\n"; + << " InputPoints\n"; + execution_modes << "OpExecutionMode %" << entry_point.name + << " OutputPoints\n"; + } + if (0 == std::strcmp(execution_model, "GLCompute")) { + execution_modes << "OpExecutionMode %" << entry_point.name + << " LocalSize 1 1 1\n"; } entry_point.execution_modes = execution_modes.str(); @@ -1869,11 +1919,44 @@ OpMemberDecorate %output_type 0 BuiltIn Position OpStore %output_pos %pos )"; generator.entry_points_.push_back(std::move(entry_point)); + generator.entry_points_[0].execution_modes = + "OpExecutionMode %main InputPoints\nOpExecutionMode %main OutputPoints\n"; CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_0)); } +TEST_F(ValidateBuiltIns, WorkgroupIdNotVec3) { + CodeGenerator generator = GetDefaultShaderCodeGenerator(); + generator.before_types_ = R"( +OpDecorate %workgroup_size BuiltIn WorkgroupSize +OpDecorate %workgroup_id BuiltIn WorkgroupId +)"; + + generator.after_types_ = R"( +%workgroup_size = OpConstantComposite %u32vec3 %u32_1 %u32_1 %u32_1 + %input_ptr = OpTypePointer Input %u32vec2 + %workgroup_id = OpVariable %input_ptr Input +)"; + + EntryPoint entry_point; + entry_point.name = "main"; + entry_point.execution_model = "GLCompute"; + entry_point.interfaces = "%workgroup_id"; + entry_point.body = R"( +%copy_size = OpCopyObject %u32vec3 %workgroup_size + %load_id = OpLoad %u32vec2 %workgroup_id +)"; + generator.entry_points_.push_back(std::move(entry_point)); + + CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("According to the Vulkan spec BuiltIn WorkgroupId " + "variable needs to be a 3-component 32-bit int vector. " + "ID <2> (OpVariable) has 2 components.")); +} + TEST_F(ValidateBuiltIns, TwoBuiltInsFirstFails) { CodeGenerator generator = GetDefaultShaderCodeGenerator(); @@ -1904,6 +1987,8 @@ OpMemberDecorate %output_type 0 BuiltIn Position OpStore %output_pos %pos )"; generator.entry_points_.push_back(std::move(entry_point)); + generator.entry_points_[0].execution_modes = + "OpExecutionMode %main InputPoints\nOpExecutionMode %main OutputPoints\n"; CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); @@ -1942,6 +2027,8 @@ OpMemberDecorate %output_type 0 BuiltIn FragCoord OpStore %output_pos %pos )"; generator.entry_points_.push_back(std::move(entry_point)); + generator.entry_points_[0].execution_modes = + "OpExecutionMode %main InputPoints\nOpExecutionMode %main OutputPoints\n"; CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); @@ -2113,6 +2200,84 @@ OpFunctionEnd "be declared when using BuiltIn FragDepth")); } +TEST_F(ValidateBuiltIns, AllowInstanceIdWithIntersectionShader) { + CodeGenerator generator = GetDefaultShaderCodeGenerator(); + generator.capabilities_ += R"( +OpCapability RayTracingNV +)"; + + generator.extensions_ = R"( +OpExtension "SPV_NV_ray_tracing" +)"; + + generator.before_types_ = R"( +OpMemberDecorate %input_type 0 BuiltIn InstanceId +)"; + + generator.after_types_ = R"( +%input_type = OpTypeStruct %u32 +%input_ptr = OpTypePointer Input %input_type +%input = OpVariable %input_ptr Input +)"; + + EntryPoint entry_point; + entry_point.name = "main_d_r"; + entry_point.execution_model = "IntersectionNV"; + entry_point.interfaces = "%input"; + entry_point.body = R"( +%val2 = OpFunctionCall %void %foo +)"; + generator.entry_points_.push_back(std::move(entry_point)); + + generator.add_at_the_end_ = R"( +%foo = OpFunction %void None %func +%foo_entry = OpLabel +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_0)); +} + +TEST_F(ValidateBuiltIns, DisallowInstanceIdWithRayGenShader) { + CodeGenerator generator = GetDefaultShaderCodeGenerator(); + generator.capabilities_ += R"( +OpCapability RayTracingNV +)"; + + generator.extensions_ = R"( +OpExtension "SPV_NV_ray_tracing" +)"; + + generator.before_types_ = R"( +OpMemberDecorate %input_type 0 BuiltIn InstanceId +)"; + + generator.after_types_ = R"( +%input_type = OpTypeStruct %u32 +%input_ptr = OpTypePointer Input %input_type +%input_ptr_u32 = OpTypePointer Input %u32 +%input = OpVariable %input_ptr Input +)"; + + EntryPoint entry_point; + entry_point.name = "main_d_r"; + entry_point.execution_model = "RayGenerationNV"; + entry_point.interfaces = "%input"; + entry_point.body = R"( +%input_member = OpAccessChain %input_ptr_u32 %input %u32_0 +)"; + generator.entry_points_.push_back(std::move(entry_point)); + + CompileSuccessfully(generator.Build(), SPV_ENV_VULKAN_1_0); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Vulkan spec allows BuiltIn InstanceId to be used " + "only with IntersectionNV, ClosestHitNV and " + "AnyHitNV execution models")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_capability_test.cpp b/3rdparty/spirv-tools/test/val/val_capability_test.cpp index 2ee7133cd..488e957ae 100644 --- a/3rdparty/spirv-tools/test/val/val_capability_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_capability_test.cpp @@ -112,6 +112,8 @@ using ValidateCapabilityVulkan10 = spvtest::ValidateBase; using ValidateCapabilityOpenGL40 = spvtest::ValidateBase; // Always assembles using Vulkan 1.1. using ValidateCapabilityVulkan11 = spvtest::ValidateBase; +// Always assembles using WebGPU. +using ValidateCapabilityWebGPU = spvtest::ValidateBase; TEST_F(ValidateCapability, Default) { const char str[] = R"( @@ -289,8 +291,10 @@ const std::vector& AllVulkan10Capabilities() { "DerivativeControl", "Geometry", "Tessellation", + "Float16", "Float64", "Int64", + "Int64Atomics", "Int16", "TessellationPointSize", "GeometryPointSize", @@ -304,6 +308,7 @@ const std::vector& AllVulkan10Capabilities() { "CullDistance", "ImageCubeArray", "SampleRateShading", + "Int8", "SparseResidency", "MinLod", "SampledCubeArray", @@ -312,7 +317,9 @@ const std::vector& AllVulkan10Capabilities() { "InterpolationFunction", "StorageImageReadWithoutFormat", "StorageImageWriteWithoutFormat", - "MultiViewport"}; + "MultiViewport", + "TransformFeedback", + "GeometryStreams"}; return *r; } @@ -330,8 +337,10 @@ const std::vector& AllVulkan11Capabilities() { "DerivativeControl", "Geometry", "Tessellation", + "Float16", "Float64", "Int64", + "Int64Atomics", "Int16", "TessellationPointSize", "GeometryPointSize", @@ -345,6 +354,7 @@ const std::vector& AllVulkan11Capabilities() { "CullDistance", "ImageCubeArray", "SampleRateShading", + "Int8", "SparseResidency", "MinLod", "SampledCubeArray", @@ -372,10 +382,24 @@ const std::vector& AllVulkan11Capabilities() { "DeviceGroup", "MultiView", "VariablePointersStorageBuffer", - "VariablePointers"}; + "VariablePointers", + "TransformFeedback", + "GeometryStreams"}; return *r; } +const std::vector& AllWebGPUCapabilities() { + static const auto r = new std::vector{ + "", + "Shader", + "Matrix", + "Sampled1D", + "Image1D", + "ImageQuery", + "DerivativeControl"}; + return *r; +} + const std::vector& MatrixDependencies() { static const auto r = new std::vector{ "Matrix", @@ -566,6 +590,12 @@ const char kGLSL450MemoryModel[] = \ " OpCapability Shader" " OpMemoryModel Logical GLSL450 "; +const char kVulkanMemoryModel[] = \ + " OpCapability Shader" + " OpCapability VulkanMemoryModelKHR" + " OpExtension \"SPV_KHR_vulkan_memory_model\"" + " OpMemoryModel Logical VulkanKHR "; + const char kVoidFVoid[] = \ " %void = OpTypeVoid" " %void_f = OpTypeFunction %void" @@ -596,9 +626,12 @@ std::make_pair(std::string(kOpenCLMemoryModel) + std::string(kVoidFVoid), TessellationDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + " OpEntryPoint Geometry %func \"shader\"" + + " OpExecutionMode %func InputPoints" + + " OpExecutionMode %func OutputPoints" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + " OpEntryPoint Fragment %func \"shader\"" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + " OpEntryPoint GLCompute %func \"shader\"" + @@ -657,6 +690,8 @@ INSTANTIATE_TEST_CASE_P(ExecutionMode, ValidateCapability, std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func Invocations 42" + + " OpExecutionMode %func InputPoints" + + " OpExecutionMode %func OutputPoints" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint TessellationControl %func \"shader\" " @@ -679,20 +714,22 @@ std::make_pair(std::string(kOpenCLMemoryModel) + "OpExecutionMode %func VertexOrderCcw" + std::string(kVoidFVoid), TessellationDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func PixelCenterInteger" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func OriginLowerLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func EarlyFragmentTests" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint TessellationControl %func \"shader\" " @@ -703,20 +740,24 @@ std::make_pair(std::string(kOpenCLMemoryModel) + "OpExecutionMode %func Xfb" + std::string(kVoidFVoid), std::vector{"TransformFeedback"}), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func DepthReplacing" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func DepthGreater" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func DepthLess" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + - "OpEntryPoint Vertex %func \"shader\" " + "OpEntryPoint Fragment %func \"shader\" " "OpExecutionMode %func DepthUnchanged" + + " OpExecutionMode %func OriginUpperLeft" + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Kernel %func \"shader\" " @@ -729,18 +770,22 @@ std::make_pair(std::string(kGLSL450MemoryModel) + std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func InputPoints" + + " OpExecutionMode %func OutputPoints" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func InputLines" + + " OpExecutionMode %func OutputLineStrip" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func InputLinesAdjacency" + + " OpExecutionMode %func OutputLineStrip" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func Triangles" + + " OpExecutionMode %func OutputTriangleStrip" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint TessellationControl %func \"shader\" " @@ -749,6 +794,7 @@ std::make_pair(std::string(kOpenCLMemoryModel) + std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func InputTrianglesAdjacency" + + " OpExecutionMode %func OutputTriangleStrip" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint TessellationControl %func \"shader\" " @@ -761,6 +807,8 @@ std::make_pair(std::string(kOpenCLMemoryModel) + std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func OutputVertices 42" + + " OpExecutionMode %func OutputPoints" + + " OpExecutionMode %func InputPoints" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint TessellationControl %func \"shader\" " @@ -769,14 +817,17 @@ std::make_pair(std::string(kOpenCLMemoryModel) + std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func OutputPoints" + + " OpExecutionMode %func InputPoints" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func OutputLineStrip" + + " OpExecutionMode %func InputLines" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kOpenCLMemoryModel) + "OpEntryPoint Geometry %func \"shader\" " "OpExecutionMode %func OutputTriangleStrip" + + " OpExecutionMode %func Triangles" + std::string(kVoidFVoid), GeometryDependencies()), std::make_pair(std::string(kGLSL450MemoryModel) + "OpEntryPoint Kernel %func \"shader\" " @@ -1088,9 +1139,12 @@ std::make_pair(std::string(kOpenCLMemoryModel) + "%intt = OpTypeInt 32 0\n" + std::string(kVoidFVoid), AllCapabilities()), std::make_pair(std::string(kOpenCLMemoryModel) + + // Uniform must target a non-void value. "OpEntryPoint Kernel %func \"compute\" \n" - "OpDecorate %intt Uniform\n" - "%intt = OpTypeInt 32 0\n" + std::string(kVoidFVoid), + "OpDecorate %int0 Uniform\n" + "%intt = OpTypeInt 32 0\n" + + "%int0 = OpConstantNull %intt" + + std::string(kVoidFVoid), ShaderDependencies()), std::make_pair(std::string(kGLSL450MemoryModel) + "OpEntryPoint Vertex %func \"shader\" \n" @@ -1502,6 +1556,16 @@ std::make_pair(std::string(kGLSL450MemoryModel) + AllSpirV10Capabilities()) )),); +INSTANTIATE_TEST_CASE_P(Capabilities, ValidateCapabilityWebGPU, + Combine( + // All capabilities to try. + ValuesIn(AllCapabilities()), + Values( +std::make_pair(std::string(kVulkanMemoryModel) + + "OpEntryPoint Vertex %func \"shader\" \n" + std::string(kVoidFVoid), + AllWebGPUCapabilities()) +)),); + INSTANTIATE_TEST_CASE_P(Capabilities, ValidateCapabilityVulkan11, Combine( // All capabilities to try. @@ -1693,6 +1757,17 @@ TEST_P(ValidateCapabilityOpenGL40, Capability) { } } +TEST_P(ValidateCapabilityWebGPU, Capability) { + const std::string capability = Capability(GetParam()); + if (Exists(capability, SPV_ENV_WEBGPU_0)) { + const std::string test_code = MakeAssembly(GetParam()); + CompileSuccessfully(test_code, SPV_ENV_WEBGPU_0); + ASSERT_EQ(ExpectedResult(GetParam()), + ValidateInstructions(SPV_ENV_WEBGPU_0)) + << test_code; + } +} + TEST_F(ValidateCapability, SemanticsIdIsAnIdNotALiteral) { // From https://github.com/KhronosGroup/SPIRV-Tools/issues/248 // The validator was interpreting the memory semantics ID number @@ -2296,6 +2371,37 @@ OpFunctionEnd << getDiagnosticString(); } +TEST_F(ValidateCapability, VulkanMemoryModelWithVulkanKHR) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)) + << getDiagnosticString(); +} + +TEST_F(ValidateCapability, VulkanMemoryModelWithGLSL450) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical GLSL450 +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("VulkanMemoryModelKHR capability must only be " + "specified if the VulkanKHR memory model is used")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_cfg_test.cpp b/3rdparty/spirv-tools/test/val/val_cfg_test.cpp index 045166925..aed0a5788 100644 --- a/3rdparty/spirv-tools/test/val/val_cfg_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_cfg_test.cpp @@ -378,8 +378,8 @@ TEST_P(ValidateCFG, BlockAppearsBeforeDominatorBad) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("Block .\\[cont\\] appears in the binary " - "before its dominator .\\[branch\\]\n" + MatchesRegex("Block .\\[%cont\\] appears in the binary " + "before its dominator .\\[%branch\\]\n" " %branch = OpLabel\n")); } @@ -410,7 +410,7 @@ TEST_P(ValidateCFG, MergeBlockTargetedByMultipleHeaderBlocksBad) { if (is_shader) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("Block .\\[merge\\] is already a merge block " + MatchesRegex("Block .\\[%merge\\] is already a merge block " "for another header\n" " %Main = OpFunction %void None %9\n")); } else { @@ -445,7 +445,7 @@ TEST_P(ValidateCFG, MergeBlockTargetedByMultipleHeaderBlocksSelectionBad) { if (is_shader) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("Block .\\[merge\\] is already a merge block " + MatchesRegex("Block .\\[%merge\\] is already a merge block " "for another header\n" " %Main = OpFunction %void None %9\n")); } else { @@ -470,8 +470,8 @@ TEST_P(ValidateCFG, BranchTargetFirstBlockBadSinceEntryBlock) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("First block .\\[entry\\] of function .\\[Main\\] " - "is targeted by block .\\[bad\\]\n" + MatchesRegex("First block .\\[%entry\\] of function " + ".\\[%Main\\] is targeted by block .\\[%bad\\]\n" " %Main = OpFunction %void None %10\n")); } @@ -494,10 +494,11 @@ TEST_P(ValidateCFG, BranchTargetFirstBlockBadSinceValue) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - MatchesRegex("Block\\(s\\) \\{..\\} are referenced but not " - "defined in function .\\[Main\\]\n" - " %Main = OpFunction %void None %10\n")) + EXPECT_THAT( + getDiagnosticString(), + MatchesRegex("Block\\(s\\) \\{11\\[%11\\]\\} are referenced but not " + "defined in function .\\[%Main\\]\n %Main = OpFunction " + "%void None %10\n")) << str; } @@ -522,8 +523,8 @@ TEST_P(ValidateCFG, BranchConditionalTrueTargetFirstBlockBad) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("First block .\\[entry\\] of function .\\[Main\\] " - "is targeted by block .\\[bad\\]\n" + MatchesRegex("First block .\\[%entry\\] of function .\\[%Main\\] " + "is targeted by block .\\[%bad\\]\n" " %Main = OpFunction %void None %10\n")); } @@ -551,8 +552,8 @@ TEST_P(ValidateCFG, BranchConditionalFalseTargetFirstBlockBad) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("First block .\\[entry\\] of function .\\[Main\\] " - "is targeted by block .\\[bad\\]\n" + MatchesRegex("First block .\\[%entry\\] of function .\\[%Main\\] " + "is targeted by block .\\[%bad\\]\n" " %Main = OpFunction %void None %10\n")); } @@ -587,8 +588,8 @@ TEST_P(ValidateCFG, SwitchTargetFirstBlockBad) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("First block .\\[entry\\] of function .\\[Main\\] " - "is targeted by block .\\[bad\\]\n" + MatchesRegex("First block .\\[%entry\\] of function .\\[%Main\\] " + "is targeted by block .\\[%bad\\]\n" " %Main = OpFunction %void None %10\n")); } @@ -623,8 +624,8 @@ TEST_P(ValidateCFG, BranchToBlockInOtherFunctionBad) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - MatchesRegex("Block\\(s\\) \\{.\\[middle2\\]\\} are referenced but not " - "defined in function .\\[Main\\]\n" + MatchesRegex("Block\\(s\\) \\{.\\[%middle2\\]\\} are referenced but not " + "defined in function .\\[%Main\\]\n" " %Main = OpFunction %void None %9\n")); } @@ -656,8 +657,8 @@ TEST_P(ValidateCFG, HeaderDoesntDominatesMergeBad) { EXPECT_THAT( getDiagnosticString(), MatchesRegex("The selection construct with the selection header " - ".\\[head\\] does not dominate the merge block " - ".\\[merge\\]\n %merge = OpLabel\n")); + ".\\[%head\\] does not dominate the merge block " + ".\\[%merge\\]\n %merge = OpLabel\n")); } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); } @@ -689,8 +690,8 @@ TEST_P(ValidateCFG, HeaderDoesntStrictlyDominateMergeBad) { EXPECT_THAT( getDiagnosticString(), MatchesRegex("The selection construct with the selection header " - ".\\[head\\] does not strictly dominate the merge block " - ".\\[head\\]\n %head = OpLabel\n")); + ".\\[%head\\] does not strictly dominate the merge block " + ".\\[%head\\]\n %head = OpLabel\n")); } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()) << str; } @@ -940,8 +941,8 @@ TEST_P(ValidateCFG, BackEdgeBlockDoesntPostDominateContinueTargetBad) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), MatchesRegex("The continue construct with the continue target " - ".\\[loop2_merge\\] is not post dominated by the " - "back-edge block .\\[be_block\\]\n" + ".\\[%loop2_merge\\] is not post dominated by the " + "back-edge block .\\[%be_block\\]\n" " %be_block = OpLabel\n")); } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); @@ -975,7 +976,7 @@ TEST_P(ValidateCFG, BranchingToNonLoopHeaderBlockBad) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - MatchesRegex("Back-edges \\(.\\[f\\] -> .\\[split\\]\\) can only " + MatchesRegex("Back-edges \\(.\\[%f\\] -> .\\[%split\\]\\) can only " "be formed between a block and a loop header.\n" " %f = OpLabel\n")); } else { @@ -1003,11 +1004,11 @@ TEST_P(ValidateCFG, BranchingToSameNonLoopHeaderBlockBad) { CompileSuccessfully(str); if (is_shader) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - MatchesRegex( - "Back-edges \\(.\\[split\\] -> .\\[split\\]\\) can only be " - "formed between a block and a loop header.\n" - " %split = OpLabel\n")); + EXPECT_THAT( + getDiagnosticString(), + MatchesRegex( + "Back-edges \\(.\\[%split\\] -> .\\[%split\\]\\) can only be " + "formed between a block and a loop header.\n %split = OpLabel\n")); } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); } @@ -1038,11 +1039,11 @@ TEST_P(ValidateCFG, MultipleBackEdgeBlocksToLoopHeaderBad) { CompileSuccessfully(str); if (is_shader) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - MatchesRegex( - "Loop header .\\[loop\\] is targeted by 2 back-edge blocks " - "but the standard requires exactly one\n" - " %loop = OpLabel\n")) + EXPECT_THAT( + getDiagnosticString(), + MatchesRegex( + "Loop header .\\[%loop\\] is targeted by 2 back-edge blocks but " + "the standard requires exactly one\n %loop = OpLabel\n")) << str; } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); @@ -1078,8 +1079,8 @@ TEST_P(ValidateCFG, ContinueTargetMustBePostDominatedByBackEdge) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), MatchesRegex("The continue construct with the continue target " - ".\\[cheader\\] is not post dominated by the " - "back-edge block .\\[be_block\\]\n" + ".\\[%cheader\\] is not post dominated by the " + "back-edge block .\\[%be_block\\]\n" " %be_block = OpLabel\n")); } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); @@ -1111,8 +1112,8 @@ TEST_P(ValidateCFG, BranchOutOfConstructToMergeBad) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), MatchesRegex("The continue construct with the continue target " - ".\\[loop\\] is not post dominated by the " - "back-edge block .\\[cont\\]\n" + ".\\[%loop\\] is not post dominated by the " + "back-edge block .\\[%cont\\]\n" " %cont = OpLabel\n")) << str; } else { @@ -1147,8 +1148,8 @@ TEST_P(ValidateCFG, BranchOutOfConstructBad) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), MatchesRegex("The continue construct with the continue target " - ".\\[loop\\] is not post dominated by the " - "back-edge block .\\[cont\\]\n" + ".\\[%loop\\] is not post dominated by the " + "back-edge block .\\[%cont\\]\n" " %cont = OpLabel\n")); } else { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); @@ -1206,6 +1207,7 @@ TEST_F(ValidateCFG, LoopWithZeroBackEdgesBad) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" + OpExecutionMode %main OriginUpperLeft OpName %loop "loop" %voidt = OpTypeVoid %funct = OpTypeFunction %voidt @@ -1221,7 +1223,7 @@ TEST_F(ValidateCFG, LoopWithZeroBackEdgesBad) { ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - MatchesRegex("Loop header .\\[loop\\] is targeted by " + MatchesRegex("Loop header .\\[%loop\\] is targeted by " "0 back-edge blocks but the standard requires exactly " "one\n %loop = OpLabel\n")); } @@ -1231,6 +1233,7 @@ TEST_F(ValidateCFG, LoopWithBackEdgeFromUnreachableContinueConstructGood) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" + OpExecutionMode %main OriginUpperLeft OpName %loop "loop" %voidt = OpTypeVoid %funct = OpTypeFunction %voidt @@ -1465,6 +1468,7 @@ TEST_F(ValidateCFG, StructuredCFGBranchIntoSelectionBody) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -1564,8 +1568,8 @@ OpFunctionEnd EXPECT_THAT( getDiagnosticString(), HasSubstr( - "Case construct that targets 10 has branches to multiple other case " - "construct targets 12 and 11\n %10 = OpLabel")); + "Case construct that targets 10[%10] has branches to multiple other " + "case construct targets 12[%12] and 11[%11]\n %10 = OpLabel")); } TEST_F(ValidateCFG, MultipleFallThroughToDefault) { @@ -1599,7 +1603,7 @@ OpFunctionEnd EXPECT_THAT( getDiagnosticString(), HasSubstr("Multiple case constructs have branches to the case construct " - "that targets 10\n %10 = OpLabel")); + "that targets 10[%10]\n %10 = OpLabel")); } TEST_F(ValidateCFG, MultipleFallThroughToNonDefault) { @@ -1633,7 +1637,7 @@ OpFunctionEnd EXPECT_THAT( getDiagnosticString(), HasSubstr("Multiple case constructs have branches to the case construct " - "that targets 12\n %12 = OpLabel")); + "that targets 12[%12]\n %12 = OpLabel")); } TEST_F(ValidateCFG, DuplicateTargetWithFallThrough) { @@ -1694,8 +1698,8 @@ OpFunctionEnd ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Case construct that targets 12 has branches to the case " - "construct that targets 11, but does not immediately " + HasSubstr("Case construct that targets 12[%12] has branches to the case " + "construct that targets 11[%11], but does not immediately " "precede it in the OpSwitch's target list\n" " OpSwitch %uint_0 %10 0 %11 1 %12")); } @@ -1730,8 +1734,8 @@ OpFunctionEnd ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Case construct that targets 12 has branches to the case " - "construct that targets 11, but does not immediately " + HasSubstr("Case construct that targets 12[%12] has branches to the case " + "construct that targets 11[%11], but does not immediately " "precede it in the OpSwitch's target list\n" " OpSwitch %uint_0 %10 0 %11 1 %12")); } @@ -1768,17 +1772,52 @@ OpFunctionEnd ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Case construct that targets 12 has branches to the case " - "construct that targets 11, but does not immediately " + HasSubstr("Case construct that targets 12[%12] has branches to the case " + "construct that targets 11[%11], but does not immediately " "precede it in the OpSwitch's target list\n" " OpSwitch %uint_0 %10 0 %11 1 %12 2 %13")); } +TEST_F(ValidateCFG, GoodUnreachableSwitch) { + const std::string text = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %2 "main" +OpExecutionMode %2 OriginUpperLeft +%3 = OpTypeVoid +%4 = OpTypeFunction %3 +%5 = OpTypeBool +%6 = OpConstantTrue %5 +%7 = OpTypeInt 32 1 +%9 = OpConstant %7 0 +%2 = OpFunction %3 None %4 +%10 = OpLabel +OpSelectionMerge %11 None +OpBranchConditional %6 %12 %13 +%12 = OpLabel +OpReturn +%13 = OpLabel +OpReturn +%11 = OpLabel +OpSelectionMerge %14 None +OpSwitch %9 %14 0 %15 +%15 = OpLabel +OpBranch %14 +%14 = OpLabel +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); +} + TEST_F(ValidateCFG, InvalidCaseExit) { const std::string text = R"( OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft %2 = OpTypeVoid %3 = OpTypeInt 32 0 %4 = OpTypeFunction %2 @@ -1801,9 +1840,10 @@ OpFunctionEnd CompileSuccessfully(text); ASSERT_EQ(SPV_ERROR_INVALID_CFG, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Case construct that targets 8 has invalid branch to " - "block 10 (not another case construct, corresponding " - "merge, outer loop merge or outer loop continue")); + HasSubstr("Case construct that targets 8[%8] has invalid branch " + "to block 10[%10] (not another case construct, " + "corresponding merge, outer loop merge or outer loop " + "continue)")); } TEST_F(ValidateCFG, GoodCaseExitsToOuterConstructs) { @@ -1811,6 +1851,7 @@ TEST_F(ValidateCFG, GoodCaseExitsToOuterConstructs) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %bool = OpTypeBool %true = OpConstantTrue %bool @@ -1841,6 +1882,184 @@ OpFunctionEnd ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); } +TEST_F(ValidateCFG, GoodUnreachableSelection) { + const std::string text = R"( +OpCapability Shader +%1 = OpExtInstImport "GLSL.std.450" +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +%void = OpTypeVoid +%8 = OpTypeFunction %void +%bool = OpTypeBool +%false = OpConstantFalse %bool +%main = OpFunction %void None %8 +%15 = OpLabel +OpBranch %16 +%16 = OpLabel +OpLoopMerge %17 %18 None +OpBranch %19 +%19 = OpLabel +OpBranchConditional %false %21 %17 +%21 = OpLabel +OpSelectionMerge %22 None +OpBranchConditional %false %23 %22 +%23 = OpLabel +OpBranch %24 +%24 = OpLabel +OpLoopMerge %25 %26 None +OpBranch %27 +%27 = OpLabel +OpReturn +%26 = OpLabel +OpBranchConditional %false %24 %25 +%25 = OpLabel +OpSelectionMerge %28 None +OpBranchConditional %false %18 %28 +%28 = OpLabel +OpBranch %22 +%22 = OpLabel +OpBranch %18 +%18 = OpLabel +OpBranch %16 +%17 = OpLabel +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(text); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateCFG, ShaderWithPhiPtr) { + const std::string text = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %1 "main" + OpExecutionMode %1 LocalSize 1 1 1 + OpSource HLSL 600 + %bool = OpTypeBool +%_ptr_Function_bool = OpTypePointer Function %bool + %void = OpTypeVoid + %5 = OpTypeFunction %void + %1 = OpFunction %void None %5 + %6 = OpLabel + %7 = OpVariable %_ptr_Function_bool Function + %8 = OpVariable %_ptr_Function_bool Function + %9 = OpUndef %bool + OpSelectionMerge %10 None + OpBranchConditional %9 %11 %10 + %11 = OpLabel + OpBranch %10 + %10 = OpLabel + %12 = OpPhi %_ptr_Function_bool %7 %6 %8 %11 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Using pointers with OpPhi requires capability " + "VariablePointers or VariablePointersStorageBuffer")); +} + +TEST_F(ValidateCFG, VarPtrShaderWithPhiPtr) { + const std::string text = R"( + OpCapability Shader + OpCapability VariablePointers + OpExtension "SPV_KHR_variable_pointers" + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %1 "main" + OpExecutionMode %1 LocalSize 1 1 1 + OpSource HLSL 600 + %bool = OpTypeBool +%_ptr_Function_bool = OpTypePointer Function %bool + %void = OpTypeVoid + %5 = OpTypeFunction %void + %1 = OpFunction %void None %5 + %6 = OpLabel + %7 = OpVariable %_ptr_Function_bool Function + %8 = OpVariable %_ptr_Function_bool Function + %9 = OpUndef %bool + OpSelectionMerge %10 None + OpBranchConditional %9 %11 %10 + %11 = OpLabel + OpBranch %10 + %10 = OpLabel + %12 = OpPhi %_ptr_Function_bool %7 %6 %8 %11 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateCFG, VarPtrStgBufShaderWithPhiStgBufPtr) { + const std::string text = R"( + OpCapability Shader + OpCapability VariablePointersStorageBuffer + OpExtension "SPV_KHR_variable_pointers" + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %1 "main" + OpExecutionMode %1 LocalSize 1 1 1 + OpSource HLSL 600 + %bool = OpTypeBool + %float = OpTypeFloat 32 +%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float + %7 = OpVariable %_ptr_StorageBuffer_float StorageBuffer + %8 = OpVariable %_ptr_StorageBuffer_float StorageBuffer + %void = OpTypeVoid + %5 = OpTypeFunction %void + %1 = OpFunction %void None %5 + %6 = OpLabel + %9 = OpUndef %bool + OpSelectionMerge %10 None + OpBranchConditional %9 %11 %10 + %11 = OpLabel + OpBranch %10 + %10 = OpLabel + %12 = OpPhi %_ptr_StorageBuffer_float %7 %6 %8 %11 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateCFG, KernelWithPhiPtr) { + const std::string text = R"( + OpCapability Kernel + OpCapability Addresses + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %1 "main" + OpExecutionMode %1 LocalSize 1 1 1 + OpSource HLSL 600 + %bool = OpTypeBool +%_ptr_Function_bool = OpTypePointer Function %bool + %void = OpTypeVoid + %5 = OpTypeFunction %void + %1 = OpFunction %void None %5 + %6 = OpLabel + %7 = OpVariable %_ptr_Function_bool Function + %8 = OpVariable %_ptr_Function_bool Function + %9 = OpUndef %bool + OpSelectionMerge %10 None + OpBranchConditional %9 %11 %10 + %11 = OpLabel + OpBranch %10 + %10 = OpLabel + %12 = OpPhi %_ptr_Function_bool %7 %6 %8 %11 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(text); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + /// TODO(umar): Nested CFG constructs } // namespace diff --git a/3rdparty/spirv-tools/test/val/val_composites_test.cpp b/3rdparty/spirv-tools/test/val/val_composites_test.cpp index 063626d1d..bf7f15d51 100644 --- a/3rdparty/spirv-tools/test/val/val_composites_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_composites_test.cpp @@ -41,6 +41,9 @@ OpCapability Float64 ss << capabilities_and_extensions; ss << "OpMemoryModel Logical GLSL450\n"; ss << "OpEntryPoint " << execution_model << " %main \"main\"\n"; + if (execution_model == "Fragment") { + ss << "OpExecutionMode %main OriginUpperLeft\n"; + } ss << R"( %void = OpTypeVoid @@ -149,15 +152,14 @@ OpMemoryModel Logical GLSL450 ; } %f32arr = OpTypeRuntimeArray %float -%bool = OpTypeBool %v4float = OpTypeVector %float 4 %array5_mat4x3 = OpTypeArray %mat4x3 %int_5 %array5_vec4 = OpTypeArray %v4float %int_5 %_ptr_Uniform_float = OpTypePointer Uniform %float %_ptr_Function_vec4 = OpTypePointer Function %v4float %_ptr_Uniform_vec4 = OpTypePointer Uniform %v4float -%struct_s = OpTypeStruct %bool %array5_vec4 %int %array5_mat4x3 -%struct_blockName = OpTypeStruct %struct_s %bool %f32arr +%struct_s = OpTypeStruct %int %array5_vec4 %int %array5_mat4x3 +%struct_blockName = OpTypeStruct %struct_s %int %f32arr %_ptr_Uniform_blockName = OpTypePointer Uniform %struct_blockName %_ptr_Uniform_struct_s = OpTypePointer Uniform %struct_s %_ptr_Uniform_array5_mat4x3 = OpTypePointer Uniform %array5_mat4x3 @@ -318,11 +320,9 @@ TEST_F(ValidateComposites, CompositeConstructVectorWrongConsituent1) { )"; CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("Expected Constituents to be scalars or vectors of the same " - "type as Result Type components")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 5[%float] cannot be a " + "type")); } TEST_F(ValidateComposites, CompositeConstructVectorWrongConsituent2) { @@ -538,7 +538,8 @@ TEST_F(ValidateComposites, CopyObjectResultTypeNotType) { CompileSuccessfully(GenerateShaderCode(body).c_str()); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 19 is not a type id")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 19[%float_0] is not a type id")); } TEST_F(ValidateComposites, CopyObjectWrongOperandType) { @@ -658,10 +659,9 @@ TEST_F(ValidateComposites, CompositeExtractNotObject) { )"; CompileSuccessfully(GenerateShaderCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("Expected Composite to be an object " - "of composite type")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 11[%v4float] cannot " + "be a type")); } TEST_F(ValidateComposites, CompositeExtractNotComposite) { @@ -1364,7 +1364,7 @@ TEST_F(ValidateComposites, CompositeExtractStructIndexOutOfBoundBad) { EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("Index is out of bounds, can not find index 3 in the " - "structure '26'. This structure has 3 members. " + "structure '25'. This structure has 3 members. " "Largest valid index is 2.")); } @@ -1385,7 +1385,7 @@ TEST_F(ValidateComposites, CompositeInsertStructIndexOutOfBoundBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr("Index is out of bounds, can not find index 3 in the structure " - " '26'. This structure has 3 members. Largest valid index " + " '25'. This structure has 3 members. Largest valid index " "is 2.")); } @@ -1467,6 +1467,30 @@ OpFunctionEnd EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } +TEST_F(ValidateComposites, ExtractDynamicLabelIndex) { + const std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%float = OpTypeFloat 32 +%v4float = OpTypeVector %float 4 +%void_fn = OpTypeFunction %void +%float_0 = OpConstant %float 0 +%v4float_0 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0 +%func = OpFunction %void None %void_fn +%1 = OpLabel +%ex = OpVectorExtractDynamic %float %v4float_0 %v4float_0 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Index to be int scalar")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_constants_test.cpp b/3rdparty/spirv-tools/test/val/val_constants_test.cpp new file mode 100644 index 000000000..80bc9709b --- /dev/null +++ b/3rdparty/spirv-tools/test/val/val_constants_test.cpp @@ -0,0 +1,285 @@ +// Copyright (c) 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Test validation of constants. +// +// This file contains newer tests. Older tests may be in other files such as +// val_id_test.cpp. + +#include +#include + +#include "gmock/gmock.h" +#include "test/unit_spirv.h" +#include "test/val/val_fixtures.h" + +namespace spvtools { +namespace val { +namespace { + +using ::testing::Eq; +using ::testing::HasSubstr; +using ::testing::ValuesIn; + +using ValidateConstant = spvtest::ValidateBase; + +#define kBasicTypes \ + "%bool = OpTypeBool " \ + "%uint = OpTypeInt 32 0 " \ + "%uint2 = OpTypeVector %uint 2 " \ + "%float = OpTypeFloat 32 " \ + "%_ptr_uint = OpTypePointer Workgroup %uint " \ + "%uint_0 = OpConstantNull %uint " \ + "%uint2_0 = OpConstantNull %uint " \ + "%float_0 = OpConstantNull %float " \ + "%false = OpConstantFalse %bool " \ + "%true = OpConstantTrue %bool " \ + "%null = OpConstantNull %_ptr_uint " + +#define kShaderPreamble \ + "OpCapability Shader\n" \ + "OpCapability Linkage\n" \ + "OpMemoryModel Logical Simple\n" + +#define kKernelPreamble \ + "OpCapability Kernel\n" \ + "OpCapability Linkage\n" \ + "OpCapability Addresses\n" \ + "OpMemoryModel Physical32 OpenCL\n" + +struct ConstantOpCase { + spv_target_env env; + std::string assembly; + bool expect_success; + std::string expect_err; +}; + +using ValidateConstantOp = spvtest::ValidateBase; + +TEST_P(ValidateConstantOp, Samples) { + const auto env = GetParam().env; + CompileSuccessfully(GetParam().assembly, env); + const auto result = ValidateInstructions(env); + if (GetParam().expect_success) { + EXPECT_EQ(SPV_SUCCESS, result); + EXPECT_THAT(getDiagnosticString(), Eq("")); + } else { + EXPECT_EQ(SPV_ERROR_INVALID_ID, result); + EXPECT_THAT(getDiagnosticString(), HasSubstr(GetParam().expect_err)); + } +} + +#define GOOD_SHADER_10(STR) \ + { SPV_ENV_UNIVERSAL_1_0, kShaderPreamble kBasicTypes STR, true, "" } +#define GOOD_KERNEL_10(STR) \ + { SPV_ENV_UNIVERSAL_1_0, kKernelPreamble kBasicTypes STR, true, "" } +INSTANTIATE_TEST_CASE_P( + UniversalInShader, ValidateConstantOp, + ValuesIn(std::vector{ + // TODO(dneto): Conversions must change width. + GOOD_SHADER_10("%v = OpSpecConstantOp %uint SConvert %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %float FConvert %float_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint SNegate %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint Not %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint IAdd %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint ISub %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint IMul %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint UDiv %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint SDiv %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint UMod %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint SRem %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint SMod %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint ShiftRightLogical %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint ShiftRightArithmetic %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint ShiftLeftLogical %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %uint BitwiseOr %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint BitwiseXor %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint2 VectorShuffle %uint2_0 %uint2_0 1 3"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint CompositeExtract %uint2_0 1"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint2 CompositeInsert %uint_0 %uint2_0 1"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool LogicalOr %true %false"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool LogicalNot %true"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool LogicalAnd %true %false"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool LogicalEqual %true %false"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool LogicalNotEqual %true %false"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %uint Select %true %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool IEqual %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool INotEqual %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool ULessThan %uint_0 %uint_0"), + GOOD_SHADER_10("%v = OpSpecConstantOp %bool SLessThan %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool ULessThanEqual %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool SLessThanEqual %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool UGreaterThan %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool UGreaterThanEqual %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool SGreaterThan %uint_0 %uint_0"), + GOOD_SHADER_10( + "%v = OpSpecConstantOp %bool SGreaterThanEqual %uint_0 %uint_0"), + })); + +INSTANTIATE_TEST_CASE_P( + UniversalInKernel, ValidateConstantOp, + ValuesIn(std::vector{ + // TODO(dneto): Conversions must change width. + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint SConvert %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FConvert %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint SNegate %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint Not %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint IAdd %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint ISub %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint IMul %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint UDiv %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint SDiv %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint UMod %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint SRem %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint SMod %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint ShiftRightLogical %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint ShiftRightArithmetic %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint ShiftLeftLogical %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint BitwiseOr %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint BitwiseXor %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint2 VectorShuffle %uint2_0 %uint2_0 1 3"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint CompositeExtract %uint2_0 1"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint2 CompositeInsert %uint_0 %uint2_0 1"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool LogicalOr %true %false"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool LogicalNot %true"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool LogicalAnd %true %false"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool LogicalEqual %true %false"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool LogicalNotEqual %true %false"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %uint Select %true %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool IEqual %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool INotEqual %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool ULessThan %uint_0 %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %bool SLessThan %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool ULessThanEqual %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool SLessThanEqual %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool UGreaterThan %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool UGreaterThanEqual %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool SGreaterThan %uint_0 %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %bool SGreaterThanEqual %uint_0 %uint_0"), + })); + +INSTANTIATE_TEST_CASE_P( + KernelInKernel, ValidateConstantOp, + ValuesIn(std::vector{ + // TODO(dneto): Conversions must change width. + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint ConvertFToS %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float ConvertSToF %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint ConvertFToU %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float ConvertUToF %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint UConvert %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %_ptr_uint GenericCastToPtr %null"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %_ptr_uint PtrCastToGeneric %null"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %uint Bitcast %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FNegate %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FAdd %float_0 %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FSub %float_0 %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FMul %float_0 %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FDiv %float_0 %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FRem %float_0 %float_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %float FMod %float_0 %float_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %_ptr_uint AccessChain %null %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %_ptr_uint InBoundsAccessChain " + "%null %uint_0"), + GOOD_KERNEL_10( + "%v = OpSpecConstantOp %_ptr_uint PtrAccessChain %null %uint_0"), + GOOD_KERNEL_10("%v = OpSpecConstantOp %_ptr_uint " + "InBoundsPtrAccessChain %null %uint_0"), + })); + +#define BAD_SHADER_10(STR, NAME) \ + { \ + SPV_ENV_UNIVERSAL_1_0, kShaderPreamble kBasicTypes STR, false, \ + "Specialization constant operation " NAME \ + " requires Kernel capability" \ + } +INSTANTIATE_TEST_CASE_P( + KernelInShader, ValidateConstantOp, + ValuesIn(std::vector{ + // TODO(dneto): Conversions must change width. + BAD_SHADER_10("%v = OpSpecConstantOp %uint ConvertFToS %float_0", + "ConvertFToS"), + BAD_SHADER_10("%v = OpSpecConstantOp %float ConvertSToF %uint_0", + "ConvertSToF"), + BAD_SHADER_10("%v = OpSpecConstantOp %uint ConvertFToU %float_0", + "ConvertFToU"), + BAD_SHADER_10("%v = OpSpecConstantOp %float ConvertUToF %uint_0", + "ConvertUToF"), + BAD_SHADER_10("%v = OpSpecConstantOp %_ptr_uint GenericCastToPtr %null", + "GenericCastToPtr"), + BAD_SHADER_10("%v = OpSpecConstantOp %_ptr_uint PtrCastToGeneric %null", + "PtrCastToGeneric"), + BAD_SHADER_10("%v = OpSpecConstantOp %uint Bitcast %uint_0", "Bitcast"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FNegate %float_0", + "FNegate"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FAdd %float_0 %float_0", + "FAdd"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FSub %float_0 %float_0", + "FSub"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FMul %float_0 %float_0", + "FMul"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FDiv %float_0 %float_0", + "FDiv"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FRem %float_0 %float_0", + "FRem"), + BAD_SHADER_10("%v = OpSpecConstantOp %float FMod %float_0 %float_0", + "FMod"), + BAD_SHADER_10( + "%v = OpSpecConstantOp %_ptr_uint AccessChain %null %uint_0", + "AccessChain"), + BAD_SHADER_10("%v = OpSpecConstantOp %_ptr_uint InBoundsAccessChain " + "%null %uint_0", + "InBoundsAccessChain"), + BAD_SHADER_10( + "%v = OpSpecConstantOp %_ptr_uint PtrAccessChain %null %uint_0", + "PtrAccessChain"), + BAD_SHADER_10("%v = OpSpecConstantOp %_ptr_uint " + "InBoundsPtrAccessChain %null %uint_0", + "InBoundsPtrAccessChain"), + })); + +} // namespace +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_conversion_test.cpp b/3rdparty/spirv-tools/test/val/val_conversion_test.cpp index e0b8a0018..4161c7428 100644 --- a/3rdparty/spirv-tools/test/val/val_conversion_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_conversion_test.cpp @@ -31,17 +31,23 @@ using ValidateConversion = spvtest::ValidateBase; std::string GenerateShaderCode( const std::string& body, - const std::string& capabilities_and_extensions = "") { + const std::string& capabilities_and_extensions = "", + const std::string& decorations = "", const std::string& types = "", + const std::string& variables = "") { const std::string capabilities = R"( OpCapability Shader OpCapability Int64 OpCapability Float64)"; - const std::string after_extension_before_body = + const std::string after_extension_before_decorations = R"( OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft)"; + + const std::string after_decorations_before_types = + R"( %void = OpTypeVoid %func = OpTypeFunction %void %bool = OpTypeBool @@ -139,8 +145,10 @@ OpEntryPoint Fragment %main "main" %true = OpConstantTrue %bool %false = OpConstantFalse %bool -%f32ptr_func = OpTypePointer Function %f32 +%f32ptr_func = OpTypePointer Function %f32)"; + const std::string after_variables_before_body = + R"( %main = OpFunction %void None %func %main_entry = OpLabel)"; @@ -150,7 +158,9 @@ OpReturn OpFunctionEnd)"; return capabilities + capabilities_and_extensions + - after_extension_before_body + body + after_body; + after_extension_before_decorations + decorations + + after_decorations_before_types + types + variables + + after_variables_before_body + body + after_body; } std::string GenerateKernelCode( @@ -629,6 +639,170 @@ TEST_F(ValidateConversion, QuantizeToF16WrongInputType) { "Expected input type to be equal to Result Type: QuantizeToF16")); } +TEST_F(ValidateConversion, ConvertFToS8BitStorage) { + const std::string capabilities_and_extensions = R"( +OpCapability StorageBuffer8BitAccess +OpExtension "SPV_KHR_8bit_storage" +OpExtension "SPV_KHR_storage_buffer_storage_class" +)"; + + const std::string decorations = R"( +OpDecorate %ssbo Block +OpDecorate %ssbo Binding 0 +OpDecorate %ssbo DescriptorSet 0 +OpMemberDecorate %ssbo 0 Offset 0 +)"; + + const std::string types = R"( +%i8 = OpTypeInt 8 1 +%i8ptr = OpTypePointer StorageBuffer %i8 +%ssbo = OpTypeStruct %i8 +%ssboptr = OpTypePointer StorageBuffer %ssbo +)"; + + const std::string variables = R"( +%var = OpVariable %ssboptr StorageBuffer +)"; + + const std::string body = R"( +%val = OpConvertFToS %i8 %f32_2 +%accesschain = OpAccessChain %i8ptr %var %u32_0 +OpStore %accesschain %val +)"; + + CompileSuccessfully(GenerateShaderCode(body, capabilities_and_extensions, + decorations, types, variables) + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Invalid cast to 8-bit integer from a floating-point: ConvertFToS")); +} + +TEST_F(ValidateConversion, ConvertFToU8BitStorage) { + const std::string capabilities_and_extensions = R"( +OpCapability StorageBuffer8BitAccess +OpExtension "SPV_KHR_8bit_storage" +OpExtension "SPV_KHR_storage_buffer_storage_class" +)"; + + const std::string decorations = R"( +OpDecorate %ssbo Block +OpDecorate %ssbo Binding 0 +OpDecorate %ssbo DescriptorSet 0 +OpMemberDecorate %ssbo 0 Offset 0 +)"; + + const std::string types = R"( +%u8 = OpTypeInt 8 0 +%u8ptr = OpTypePointer StorageBuffer %u8 +%ssbo = OpTypeStruct %u8 +%ssboptr = OpTypePointer StorageBuffer %ssbo +)"; + + const std::string variables = R"( +%var = OpVariable %ssboptr StorageBuffer +)"; + + const std::string body = R"( +%val = OpConvertFToU %u8 %f32_2 +%accesschain = OpAccessChain %u8ptr %var %u32_0 +OpStore %accesschain %val +)"; + + CompileSuccessfully(GenerateShaderCode(body, capabilities_and_extensions, + decorations, types, variables) + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Invalid cast to 8-bit integer from a floating-point: ConvertFToU")); +} + +TEST_F(ValidateConversion, ConvertSToF8BitStorage) { + const std::string capabilities_and_extensions = R"( +OpCapability StorageBuffer8BitAccess +OpExtension "SPV_KHR_8bit_storage" +OpExtension "SPV_KHR_storage_buffer_storage_class" +)"; + + const std::string decorations = R"( +OpDecorate %ssbo Block +OpDecorate %ssbo Binding 0 +OpDecorate %ssbo DescriptorSet 0 +OpMemberDecorate %ssbo 0 Offset 0 +)"; + + const std::string types = R"( +%i8 = OpTypeInt 8 1 +%i8ptr = OpTypePointer StorageBuffer %i8 +%ssbo = OpTypeStruct %i8 +%ssboptr = OpTypePointer StorageBuffer %ssbo +)"; + + const std::string variables = R"( +%var = OpVariable %ssboptr StorageBuffer +)"; + + const std::string body = R"( +%accesschain = OpAccessChain %i8ptr %var %u32_0 +%load = OpLoad %i8 %accesschain +%val = OpConvertSToF %f32 %load +)"; + + CompileSuccessfully(GenerateShaderCode(body, capabilities_and_extensions, + decorations, types, variables) + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Invalid cast to floating-point from an 8-bit integer: ConvertSToF")); +} + +TEST_F(ValidateConversion, ConvertUToF8BitStorage) { + const std::string capabilities_and_extensions = R"( +OpCapability StorageBuffer8BitAccess +OpExtension "SPV_KHR_8bit_storage" +OpExtension "SPV_KHR_storage_buffer_storage_class" +)"; + + const std::string decorations = R"( +OpDecorate %ssbo Block +OpDecorate %ssbo Binding 0 +OpDecorate %ssbo DescriptorSet 0 +OpMemberDecorate %ssbo 0 Offset 0 +)"; + + const std::string types = R"( +%u8 = OpTypeInt 8 0 +%u8ptr = OpTypePointer StorageBuffer %u8 +%ssbo = OpTypeStruct %u8 +%ssboptr = OpTypePointer StorageBuffer %ssbo +)"; + + const std::string variables = R"( +%var = OpVariable %ssboptr StorageBuffer +)"; + + const std::string body = R"( +%accesschain = OpAccessChain %u8ptr %var %u32_0 +%load = OpLoad %u8 %accesschain +%val = OpConvertUToF %f32 %load +)"; + + CompileSuccessfully(GenerateShaderCode(body, capabilities_and_extensions, + decorations, types, variables) + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Invalid cast to floating-point from an 8-bit integer: ConvertUToF")); +} + TEST_F(ValidateConversion, ConvertPtrToUSuccess) { const std::string body = R"( %ptr = OpVariable %f32ptr_func Function @@ -798,9 +972,9 @@ TEST_F(ValidateConversion, PtrCastToGenericWrongInputType) { )"; CompileSuccessfully(GenerateKernelCode(body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("Expected input to be a pointer: PtrCastToGeneric")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 4[%float] cannot be a " + "type")); } TEST_F(ValidateConversion, PtrCastToGenericWrongInputStorageClass) { @@ -1034,9 +1208,9 @@ TEST_F(ValidateConversion, BitcastInputHasNoType) { )"; CompileSuccessfully(GenerateKernelCode(body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("Expected input to have a type: Bitcast")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 4[%float] cannot be a " + "type")); } TEST_F(ValidateConversion, BitcastWrongResultType) { @@ -1105,6 +1279,29 @@ TEST_F(ValidateConversion, BitcastDifferentTotalBitWidth) { "Bitcast")); } +TEST_F(ValidateConversion, ConvertUToPtrInputIsAType) { + const std::string spirv = R"( +OpCapability Addresses +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%int = OpTypeInt 32 0 +%ptr_int = OpTypePointer Function %int +%void = OpTypeVoid +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%1 = OpConvertUToPtr %ptr_int %int +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 1[%uint] cannot be a " + "type")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_data_test.cpp b/3rdparty/spirv-tools/test/val/val_data_test.cpp index d022d8b8a..fcf447a59 100644 --- a/3rdparty/spirv-tools/test/val/val_data_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_data_test.cpp @@ -290,6 +290,17 @@ TEST_F(ValidateData, storage_input_output_16_good) { ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); } +TEST_F(ValidateData, amd_gpu_shader_half_float_fetch_16_good) { + std::string str = R"( + OpCapability Shader + OpCapability Linkage + OpExtension "SPV_AMD_gpu_shader_half_float_fetch" + OpMemoryModel Logical GLSL450 + %2 = OpTypeFloat 16)"; + CompileSuccessfully(str.c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + TEST_F(ValidateData, int16_bad) { std::string str = header + "%2 = OpTypeInt 16 1"; CompileSuccessfully(str.c_str()); @@ -375,7 +386,8 @@ TEST_F(ValidateData, ids_should_be_validated_before_data) { )"; CompileSuccessfully(str.c_str()); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 3 has not been defined")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 3[%3] has not been defined")); } TEST_F(ValidateData, matrix_bad_column_type) { @@ -562,8 +574,8 @@ OpTypeForwardPointer %_ptr_Generic_struct_A Generic CompileSuccessfully(str.c_str()); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Found a forward reference to a non-pointer type in " - "OpTypeStruct instruction.")); + HasSubstr("Pointer type in OpTypeForwardPointer is not a pointer " + "type.\n OpTypeForwardPointer %float Generic\n")); } TEST_F(ValidateData, forward_ref_points_to_non_struct) { @@ -603,11 +615,24 @@ TEST_F(ValidateData, ext_16bit_storage_caps_allow_free_fp_rounding_mode) { OpCapability Linkage OpCapability )") + cap + R"( + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpExtension "SPV_KHR_variable_pointers" OpExtension "SPV_KHR_16bit_storage" OpMemoryModel Logical GLSL450 - OpDecorate %2 FPRoundingMode )" + mode + R"( - %1 = OpTypeFloat 32 - %2 = OpConstant %1 1.25 + OpDecorate %_ FPRoundingMode )" + mode + R"( + %half = OpTypeFloat 16 + %float = OpTypeFloat 32 + %float_1_25 = OpConstant %float 1.25 + %half_ptr = OpTypePointer StorageBuffer %half + %half_ptr_var = OpVariable %half_ptr StorageBuffer + %void = OpTypeVoid + %func = OpTypeFunction %void + %main = OpFunction %void None %func + %main_entry = OpLabel + %_ = OpFConvert %half %float_1_25 + OpStore %half_ptr_var %_ + OpReturn + OpFunctionEnd )"; CompileSuccessfully(str.c_str()); ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); @@ -620,11 +645,24 @@ TEST_F(ValidateData, vulkan_disallow_free_fp_rounding_mode) { for (const auto env : {SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_1}) { std::string str = std::string(R"( OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpExtension "SPV_KHR_variable_pointers" OpMemoryModel Logical GLSL450 - OpDecorate %2 FPRoundingMode )") + + OpDecorate %_ FPRoundingMode )") + mode + R"( - %1 = OpTypeFloat 32 - %2 = OpConstant %1 1.25 + %half = OpTypeFloat 16 + %float = OpTypeFloat 32 + %float_1_25 = OpConstant %float 1.25 + %half_ptr = OpTypePointer StorageBuffer %half + %half_ptr_var = OpVariable %half_ptr StorageBuffer + %void = OpTypeVoid + %func = OpTypeFunction %void + %main = OpFunction %void None %func + %main_entry = OpLabel + %_ = OpFConvert %half %float_1_25 + OpStore %half_ptr_var %_ + OpReturn + OpFunctionEnd )"; CompileSuccessfully(str.c_str()); ASSERT_EQ(SPV_ERROR_INVALID_CAPABILITY, ValidateInstructions(env)); @@ -637,6 +675,34 @@ TEST_F(ValidateData, vulkan_disallow_free_fp_rounding_mode) { } } +TEST_F(ValidateData, void_array) { + std::string str = header + R"( + %void = OpTypeVoid + %int = OpTypeInt 32 0 + %int_5 = OpConstant %int 5 + %array = OpTypeArray %void %int_5 + )"; + + CompileSuccessfully(str.c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("OpTypeArray Element Type '1[%void]' is a void type.")); +} + +TEST_F(ValidateData, void_runtime_array) { + std::string str = header + R"( + %void = OpTypeVoid + %array = OpTypeRuntimeArray %void + )"; + + CompileSuccessfully(str.c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "OpTypeRuntimeArray Element Type '1[%void]' is a void type.")); +} } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_decoration_test.cpp b/3rdparty/spirv-tools/test/val/val_decoration_test.cpp index c968183ca..3a4320dba 100644 --- a/3rdparty/spirv-tools/test/val/val_decoration_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_decoration_test.cpp @@ -37,7 +37,7 @@ TEST_F(ValidateDecorations, ValidateOpDecorateRegistration) { OpCapability Linkage OpMemoryModel Logical GLSL450 OpDecorate %1 ArrayStride 4 - OpDecorate %1 Uniform + OpDecorate %1 RelaxedPrecision %2 = OpTypeFloat 32 %1 = OpTypeRuntimeArray %2 ; Since %1 is used first in Decoration, it gets id 1. @@ -49,7 +49,7 @@ TEST_F(ValidateDecorations, ValidateOpDecorateRegistration) { EXPECT_THAT( vstate_->id_decorations(id), Eq(std::vector{Decoration(SpvDecorationArrayStride, {4}), - Decoration(SpvDecorationUniform)})); + Decoration(SpvDecorationRelaxedPrecision)})); } TEST_F(ValidateDecorations, ValidateOpMemberDecorateRegistration) { @@ -85,6 +85,30 @@ TEST_F(ValidateDecorations, ValidateOpMemberDecorateRegistration) { Decoration(SpvDecorationBufferBlock)})); } +TEST_F(ValidateDecorations, ValidateOpMemberDecorateOutOfBound) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "Main" + OpExecutionMode %1 OriginUpperLeft + OpMemberDecorate %_struct_2 1 RelaxedPrecision + %void = OpTypeVoid + %4 = OpTypeFunction %void + %float = OpTypeFloat 32 + %_struct_2 = OpTypeStruct %float + %1 = OpFunction %void None %4 + %6 = OpLabel + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Index 1 provided in OpMemberDecorate for struct " + "2[%_struct_2] is out of bounds. The structure has 1 " + "members. Largest valid index is 0.")); +} + TEST_F(ValidateDecorations, ValidateGroupDecorateRegistration) { std::string spirv = R"( OpCapability Shader @@ -124,6 +148,44 @@ TEST_F(ValidateDecorations, ValidateGroupDecorateRegistration) { EXPECT_THAT(vstate_->id_decorations(4), Eq(expected_decorations)); } +TEST_F(ValidateDecorations, WebGPUOpDecorationGroupBad) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpDecorate %1 DescriptorSet 0 + OpDecorate %1 NonWritable + OpDecorate %1 Restrict + %1 = OpDecorationGroup + OpGroupDecorate %1 %2 %3 + OpGroupDecorate %1 %4 + %float = OpTypeFloat 32 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_9 = OpTypeStruct %_runtimearr_float +%_ptr_Uniform__struct_9 = OpTypePointer Uniform %_struct_9 + %2 = OpVariable %_ptr_Uniform__struct_9 Uniform + %_struct_10 = OpTypeStruct %_runtimearr_float +%_ptr_Uniform__struct_10 = OpTypePointer Uniform %_struct_10 + %3 = OpVariable %_ptr_Uniform__struct_10 Uniform + %_struct_11 = OpTypeStruct %_runtimearr_float +%_ptr_Uniform__struct_11 = OpTypePointer Uniform %_struct_11 + %4 = OpVariable %_ptr_Uniform__struct_11 Uniform + )"; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpDecorationGroup is not allowed in the WebGPU " + "execution environment.\n %1 = OpDecorationGroup\n")); +} + +// For WebGPU, OpGroupDecorate does not have a test case, because it requires +// being preceded by OpDecorationGroup, which will cause a validation error. + +// For WebGPU, OpGroupMemberDecorate does not have a test case, because it +// requires being preceded by OpDecorationGroup, which will cause a validation +// error. + TEST_F(ValidateDecorations, ValidateGroupMemberDecorateRegistration) { std::string spirv = R"( OpCapability Shader @@ -238,10 +300,11 @@ TEST_F(ValidateDecorations, StructContainsBuiltInStructBad) { CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Structure 1 contains members with BuiltIn " - "decoration. Therefore this structure may not be " - "contained as a member of another structure type. " - "Structure 4 contains structure 1.")); + HasSubstr("Structure 1[%_struct_1] contains members with " + "BuiltIn decoration. Therefore this structure may not " + "be contained as a member of another structure type. " + "Structure 4[%_struct_4] contains structure " + "1[%_struct_1].")); } TEST_F(ValidateDecorations, StructContainsNonBuiltInStructGood) { @@ -263,6 +326,8 @@ TEST_F(ValidateDecorations, MultipleBuiltInObjectsConsumedByOpEntryPointBad) { OpCapability Geometry OpMemoryModel Logical GLSL450 OpEntryPoint Geometry %main "main" %in_1 %in_2 + OpExecutionMode %main InputPoints + OpExecutionMode %main OutputPoints OpMemberDecorate %struct_1 0 BuiltIn InvocationId OpMemberDecorate %struct_2 0 BuiltIn Position %int = OpTypeInt 32 1 @@ -295,6 +360,8 @@ TEST_F(ValidateDecorations, OpCapability Geometry OpMemoryModel Logical GLSL450 OpEntryPoint Geometry %main "main" %in_1 %out_1 + OpExecutionMode %main InputPoints + OpExecutionMode %main OutputPoints OpMemberDecorate %struct_1 0 BuiltIn InvocationId OpMemberDecorate %struct_2 0 BuiltIn Position %int = OpTypeInt 32 1 @@ -322,6 +389,8 @@ TEST_F(ValidateDecorations, NoBuiltInObjectsConsumedByOpEntryPointGood) { OpCapability Geometry OpMemoryModel Logical GLSL450 OpEntryPoint Geometry %main "main" %in_1 %out_1 + OpExecutionMode %main InputPoints + OpExecutionMode %main OutputPoints %int = OpTypeInt 32 1 %void = OpTypeVoid %func = OpTypeFunction %void @@ -591,12 +660,12 @@ TEST_F(ValidateDecorations, RuntimeArrayOfDescriptorSetsIsAllowed) { %10 = OpTypeImage %float 2D 0 0 0 1 Unknown %11 = OpTypeSampledImage %10 %_runtimearr_11 = OpTypeRuntimeArray %11 -%_ptr_UniformConstant__runtimearr_11 = OpTypePointer UniformConstant %_runtimearr_11 - %s2d = OpVariable %_ptr_UniformConstant__runtimearr_11 UniformConstant +%_ptr_Uniform__runtimearr_11 = OpTypePointer Uniform %_runtimearr_11 + %s2d = OpVariable %_ptr_Uniform__runtimearr_11 Uniform %int = OpTypeInt 32 1 %_ptr_Input_int = OpTypePointer Input %int %i = OpVariable %_ptr_Input_int Input -%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11 +%_ptr_Uniform_11 = OpTypePointer Uniform %11 %v2float = OpTypeVector %float 2 %float_0_300000012 = OpConstant %float 0.300000012 %24 = OpConstantComposite %v2float %float_0_300000012 %float_0_300000012 @@ -605,7 +674,7 @@ TEST_F(ValidateDecorations, RuntimeArrayOfDescriptorSetsIsAllowed) { %5 = OpLabel %v = OpVariable %_ptr_Function_v4float Function %18 = OpLoad %int %i - %20 = OpAccessChain %_ptr_UniformConstant_11 %s2d %18 + %20 = OpAccessChain %_ptr_Uniform_11 %s2d %18 %21 = OpLoad %11 %20 %26 = OpImageSampleExplicitLod %v4float %21 %24 Lod %float_0 OpStore %v %26 @@ -616,119 +685,6 @@ TEST_F(ValidateDecorations, RuntimeArrayOfDescriptorSetsIsAllowed) { EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); } -// #version 440 -// #extension GL_EXT_nonuniform_qualifier : enable -// layout(binding = 1) uniform sampler2D s2d[][2]; -// layout(location = 0) in nonuniformEXT int i; -// void main() -// { -// vec4 v = texture(s2d[i][i], vec2(0.3)); -// } -TEST_F(ValidateDecorations, RuntimeArrayOfArraysOfDescriptorSetsIsDisallowed) { - const spv_target_env env = SPV_ENV_VULKAN_1_0; - std::string spirv = R"( - OpCapability Shader - OpCapability ShaderNonUniformEXT - OpCapability RuntimeDescriptorArrayEXT - OpCapability SampledImageArrayNonUniformIndexingEXT - OpExtension "SPV_EXT_descriptor_indexing" - %1 = OpExtInstImport "GLSL.std.450" - OpMemoryModel Logical GLSL450 - OpEntryPoint Vertex %main "main" %i - OpSource GLSL 440 - OpSourceExtension "GL_EXT_nonuniform_qualifier" - OpName %main "main" - OpName %v "v" - OpName %s2d "s2d" - OpName %i "i" - OpDecorate %s2d DescriptorSet 0 - OpDecorate %s2d Binding 1 - OpDecorate %i Location 0 - OpDecorate %i NonUniformEXT - OpDecorate %21 NonUniformEXT - OpDecorate %22 NonUniformEXT - OpDecorate %25 NonUniformEXT - %void = OpTypeVoid - %3 = OpTypeFunction %void - %float = OpTypeFloat 32 - %v4float = OpTypeVector %float 4 -%_ptr_Function_v4float = OpTypePointer Function %v4float - %10 = OpTypeImage %float 2D 0 0 0 1 Unknown - %11 = OpTypeSampledImage %10 - %uint = OpTypeInt 32 0 - %uint_2 = OpConstant %uint 2 -%_arr_11_uint_2 = OpTypeArray %11 %uint_2 -%_runtimearr__arr_11_uint_2 = OpTypeRuntimeArray %_arr_11_uint_2 -%_ptr_UniformConstant__runtimearr__arr_11_uint_2 = OpTypePointer UniformConstant %_runtimearr__arr_11_uint_2 - %s2d = OpVariable %_ptr_UniformConstant__runtimearr__arr_11_uint_2 UniformConstant - %int = OpTypeInt 32 1 -%_ptr_Input_int = OpTypePointer Input %int - %i = OpVariable %_ptr_Input_int Input -%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11 - %v2float = OpTypeVector %float 2 -%float_0_300000012 = OpConstant %float 0.300000012 - %28 = OpConstantComposite %v2float %float_0_300000012 %float_0_300000012 - %float_0 = OpConstant %float 0 - %main = OpFunction %void None %3 - %5 = OpLabel - %v = OpVariable %_ptr_Function_v4float Function - %21 = OpLoad %int %i - %22 = OpLoad %int %i - %24 = OpAccessChain %_ptr_UniformConstant_11 %s2d %21 %22 - %25 = OpLoad %11 %24 - %30 = OpImageSampleExplicitLod %v4float %25 %28 Lod %float_0 - OpStore %v %30 - OpReturn - OpFunctionEnd -)"; - CompileSuccessfully(spirv, env); - - EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState(env)); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("Only a single level of array is allowed for " - "descriptor set variables")); -} - -// #version 440 -// layout (set=1, binding=1) uniform sampler2D variableName[2][2]; -// void main() { -// } -TEST_F(ValidateDecorations, ArrayOfArraysOfDescriptorSetsIsDisallowed) { - const spv_target_env env = SPV_ENV_VULKAN_1_0; - std::string spirv = R"( - OpCapability Shader - %1 = OpExtInstImport "GLSL.std.450" - OpMemoryModel Logical GLSL450 - OpEntryPoint Vertex %main "main" - OpSource GLSL 440 - OpName %main "main" - OpName %variableName "variableName" - OpDecorate %variableName DescriptorSet 1 - OpDecorate %variableName Binding 1 - %void = OpTypeVoid - %3 = OpTypeFunction %void - %float = OpTypeFloat 32 - %7 = OpTypeImage %float 2D 0 0 0 1 Unknown - %8 = OpTypeSampledImage %7 - %uint = OpTypeInt 32 0 - %uint_2 = OpConstant %uint 2 -%_arr_8_uint_2 = OpTypeArray %8 %uint_2 -%_arr__arr_8_uint_2_uint_2 = OpTypeArray %_arr_8_uint_2 %uint_2 -%_ptr_UniformConstant__arr__arr_8_uint_2_uint_2 = OpTypePointer UniformConstant %_arr__arr_8_uint_2_uint_2 -%variableName = OpVariable %_ptr_UniformConstant__arr__arr_8_uint_2_uint_2 UniformConstant - %main = OpFunction %void None %3 - %5 = OpLabel - OpReturn - OpFunctionEnd -)"; - CompileSuccessfully(spirv, env); - - EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState(env)); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("Only a single level of array is allowed for " - "descriptor set variables")); -} - TEST_F(ValidateDecorations, BlockMissingOffsetBad) { std::string spirv = R"( OpCapability Shader @@ -1642,7 +1598,7 @@ TEST_F(ValidateDecorations, getDiagnosticString(), HasSubstr( "Structure id 2 decorated as Block for variable in Uniform storage " - "class must follow standard uniform buffer layout rules: member 1 at " + "class must follow relaxed uniform buffer layout rules: member 1 at " "offset 5 is not aligned to scalar element size 4")); } @@ -1679,6 +1635,263 @@ TEST_F(ValidateDecorations, EXPECT_THAT(getDiagnosticString(), Eq("")); } +TEST_F(ValidateDecorations, + BlockLayoutPermitsTightScalarVec3PackingWithScalarLayoutGood) { + // Same as previous test, but with scalar block layout. + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 4 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %v3float = OpTypeVector %float 3 + %S = OpTypeStruct %float %v3float +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F(ValidateDecorations, + BlockLayoutPermitsScalarAlignedArrayWithScalarLayoutGood) { + // The array at offset 4 is ok with scalar block layout. + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 4 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + OpDecorate %arr_float ArrayStride 4 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %uint = OpTypeInt 32 0 + %uint_3 = OpConstant %uint 3 + %float = OpTypeFloat 32 + %arr_float = OpTypeArray %float %uint_3 + %S = OpTypeStruct %float %arr_float +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F(ValidateDecorations, + BlockLayoutPermitsScalarAlignedArrayOfVec3WithScalarLayoutGood) { + // The array at offset 4 is ok with scalar block layout, even though + // its elements are vec3. + // This is the same as the previous case, but the array elements are vec3 + // instead of float. + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 4 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + OpDecorate %arr_vec3 ArrayStride 12 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %uint = OpTypeInt 32 0 + %uint_3 = OpConstant %uint 3 + %float = OpTypeFloat 32 + %vec3 = OpTypeVector %float 3 + %arr_vec3 = OpTypeArray %vec3 %uint_3 + %S = OpTypeStruct %float %arr_vec3 +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F(ValidateDecorations, + BlockLayoutPermitsScalarAlignedStructWithScalarLayoutGood) { + // Scalar block layout permits the struct at offset 4, even though + // it contains a vector with base alignment 8 and scalar alignment 4. + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 4 + OpMemberDecorate %st 0 Offset 0 + OpMemberDecorate %st 1 Offset 8 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %vec2 = OpTypeVector %float 2 + %st = OpTypeStruct %vec2 %float + %S = OpTypeStruct %float %st +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F( + ValidateDecorations, + BlockLayoutPermitsFieldsInBaseAlignmentPaddingAtEndOfStructWithScalarLayoutGood) { + // Scalar block layout permits fields in what would normally be the padding at + // the end of a struct. + std::string spirv = R"( + OpCapability Shader + OpCapability Float64 + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %st 0 Offset 0 + OpMemberDecorate %st 1 Offset 8 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 12 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %double = OpTypeFloat 64 + %st = OpTypeStruct %double %float + %S = OpTypeStruct %st %float +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F( + ValidateDecorations, + BlockLayoutPermitsStraddlingVectorWithScalarLayoutOverrideRelaxBlockLayoutGood) { + // Same as previous, but set relaxed block layout first. Scalar layout always + // wins. + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 4 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %vec4 = OpTypeVector %float 4 + %S = OpTypeStruct %float %vec4 +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetRelaxBlockLayout(getValidatorOptions(), true); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F( + ValidateDecorations, + BlockLayoutPermitsStraddlingVectorWithRelaxedLayoutOverridenByScalarBlockLayoutGood) { + // Same as previous, but set scalar block layout first. Scalar layout always + // wins. + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 450 + OpMemberDecorate %S 0 Offset 0 + OpMemberDecorate %S 1 Offset 4 + OpDecorate %S Block + OpDecorate %B DescriptorSet 0 + OpDecorate %B Binding 0 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %vec4 = OpTypeVector %float 4 + %S = OpTypeStruct %float %vec4 +%_ptr_Uniform_S = OpTypePointer Uniform %S + %B = OpVariable %_ptr_Uniform_S Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + spvValidatorOptionsSetScalarBlockLayout(getValidatorOptions(), true); + spvValidatorOptionsSetRelaxBlockLayout(getValidatorOptions(), true); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_0)); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + TEST_F(ValidateDecorations, BufferBlock16bitStandardStorageBufferLayout) { std::string spirv = R"( OpCapability Shader @@ -1800,6 +2013,8 @@ TEST_F(ValidateDecorations, BlockArrayBadAlignmentWithRelaxedLayoutStillBad) { OpEntryPoint Vertex %main "main" OpSource GLSL 450 OpDecorate %_arr_float_uint_2 ArrayStride 16 + OpDecorate %u DescriptorSet 0 + OpDecorate %u Binding 0 OpMemberDecorate %S 0 Offset 0 OpMemberDecorate %S 1 Offset 8 OpDecorate %S Block @@ -1826,7 +2041,7 @@ TEST_F(ValidateDecorations, BlockArrayBadAlignmentWithRelaxedLayoutStillBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr( - "Structure id 3 decorated as Block for variable in Uniform " + "Structure id 4 decorated as Block for variable in Uniform " "storage class must follow standard uniform buffer layout rules: " "member 1 at offset 8 is not aligned to 16")); } @@ -1840,6 +2055,8 @@ TEST_F(ValidateDecorations, BlockArrayBadAlignmentWithVulkan1_1StillBad) { OpEntryPoint Vertex %main "main" OpSource GLSL 450 OpDecorate %_arr_float_uint_2 ArrayStride 16 + OpDecorate %u DescriptorSet 0 + OpDecorate %u Binding 0 OpMemberDecorate %S 0 Offset 0 OpMemberDecorate %S 1 Offset 8 OpDecorate %S Block @@ -1865,8 +2082,8 @@ TEST_F(ValidateDecorations, BlockArrayBadAlignmentWithVulkan1_1StillBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr( - "Structure id 3 decorated as Block for variable in Uniform " - "storage class must follow standard uniform buffer layout rules: " + "Structure id 4 decorated as Block for variable in Uniform " + "storage class must follow relaxed uniform buffer layout rules: " "member 1 at offset 8 is not aligned to 16")); } @@ -2007,6 +2224,797 @@ TEST_F(ValidateDecorations, "rules: member 1 at offset 4 is not aligned to 16")); } +TEST_F(ValidateDecorations, PushConstantMissingBlockGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %pc = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, VulkanPushConstantMissingBlockBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %pc = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("PushConstant id '2' is missing Block decoration.\n" + "From Vulkan spec, section 14.5.1:\n" + "Such variables must be identified with a Block " + "decoration")); +} + +TEST_F(ValidateDecorations, MultiplePushConstantsSingleEntryPointGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %ptr_float = OpTypePointer PushConstant %float + %pc1 = OpVariable %ptr PushConstant + %pc2 = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpAccessChain %ptr_float %pc1 %int_0 + %3 = OpLoad %float %2 + %4 = OpAccessChain %ptr_float %pc2 %int_0 + %5 = OpLoad %float %4 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, + VulkanMultiplePushConstantsDifferentEntryPointGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "func1" + OpEntryPoint Fragment %2 "func2" + OpExecutionMode %2 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %ptr_float = OpTypePointer PushConstant %float + %pc1 = OpVariable %ptr PushConstant + %pc2 = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label1 = OpLabel + %3 = OpAccessChain %ptr_float %pc1 %int_0 + %4 = OpLoad %float %3 + OpReturn + OpFunctionEnd + + %2 = OpFunction %void None %voidfn + %label2 = OpLabel + %5 = OpAccessChain %ptr_float %pc2 %int_0 + %6 = OpLoad %float %5 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, + VulkanMultiplePushConstantsUnusedSingleEntryPointGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %ptr_float = OpTypePointer PushConstant %float + %pc1 = OpVariable %ptr PushConstant + %pc2 = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, VulkanMultiplePushConstantsSingleEntryPointBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %ptr_float = OpTypePointer PushConstant %float + %pc1 = OpVariable %ptr PushConstant + %pc2 = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpAccessChain %ptr_float %pc1 %int_0 + %3 = OpLoad %float %2 + %4 = OpAccessChain %ptr_float %pc2 %int_0 + %5 = OpLoad %float %4 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Entry point id '1' uses more than one PushConstant interface.\n" + "From Vulkan spec, section 14.5.1:\n" + "There must be no more than one push constant block " + "statically used per shader entry point.")); +} + +TEST_F(ValidateDecorations, + VulkanMultiplePushConstantsDifferentEntryPointSubFunctionGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %1 "func1" + OpEntryPoint Fragment %2 "func2" + OpExecutionMode %2 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %ptr_float = OpTypePointer PushConstant %float + %pc1 = OpVariable %ptr PushConstant + %pc2 = OpVariable %ptr PushConstant + + %sub1 = OpFunction %void None %voidfn + %label_sub1 = OpLabel + %3 = OpAccessChain %ptr_float %pc1 %int_0 + %4 = OpLoad %float %3 + OpReturn + OpFunctionEnd + + %sub2 = OpFunction %void None %voidfn + %label_sub2 = OpLabel + %5 = OpAccessChain %ptr_float %pc2 %int_0 + %6 = OpLoad %float %5 + OpReturn + OpFunctionEnd + + %1 = OpFunction %void None %voidfn + %label1 = OpLabel + %call1 = OpFunctionCall %void %sub1 + OpReturn + OpFunctionEnd + + %2 = OpFunction %void None %voidfn + %label2 = OpLabel + %call2 = OpFunctionCall %void %sub2 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, + VulkanMultiplePushConstantsSingleEntryPointSubFunctionBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %ptr_float = OpTypePointer PushConstant %float + %pc1 = OpVariable %ptr PushConstant + %pc2 = OpVariable %ptr PushConstant + + %sub1 = OpFunction %void None %voidfn + %label_sub1 = OpLabel + %3 = OpAccessChain %ptr_float %pc1 %int_0 + %4 = OpLoad %float %3 + OpReturn + OpFunctionEnd + + %sub2 = OpFunction %void None %voidfn + %label_sub2 = OpLabel + %5 = OpAccessChain %ptr_float %pc2 %int_0 + %6 = OpLoad %float %5 + OpReturn + OpFunctionEnd + + %1 = OpFunction %void None %voidfn + %label1 = OpLabel + %call1 = OpFunctionCall %void %sub1 + %call2 = OpFunctionCall %void %sub2 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Entry point id '1' uses more than one PushConstant interface.\n" + "From Vulkan spec, section 14.5.1:\n" + "There must be no more than one push constant block " + "statically used per shader entry point.")); +} + +TEST_F(ValidateDecorations, VulkanUniformMissingDescriptorSetBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer Uniform %struct +%ptr_float = OpTypePointer Uniform %float + %var = OpVariable %ptr Uniform + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpAccessChain %ptr_float %var %int_0 + %3 = OpLoad %float %2 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Uniform id '3' is missing DescriptorSet decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, VulkanUniformMissingBindingBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + OpDecorate %var DescriptorSet 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer Uniform %struct +%ptr_float = OpTypePointer Uniform %float + %var = OpVariable %ptr Uniform + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpAccessChain %ptr_float %var %int_0 + %3 = OpLoad %float %2 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Uniform id '3' is missing Binding decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, VulkanUniformConstantMissingDescriptorSetBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %sampler = OpTypeSampler + %ptr = OpTypePointer UniformConstant %sampler + %var = OpVariable %ptr UniformConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpLoad %sampler %var + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("UniformConstant id '2' is missing DescriptorSet decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, VulkanUniformConstantMissingBindingBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %var DescriptorSet 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %sampler = OpTypeSampler + %ptr = OpTypePointer UniformConstant %sampler + %var = OpVariable %ptr UniformConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpLoad %sampler %var + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("UniformConstant id '2' is missing Binding decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, VulkanStorageBufferMissingDescriptorSetBad) { + std::string spirv = R"( + OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer StorageBuffer %struct + %var = OpVariable %ptr StorageBuffer +%ptr_float = OpTypePointer StorageBuffer %float + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpAccessChain %ptr_float %var %int_0 + %3 = OpLoad %float %2 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("StorageBuffer id '3' is missing DescriptorSet decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, VulkanStorageBufferMissingBindingBad) { + std::string spirv = R"( + OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpDecorate %var DescriptorSet 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer StorageBuffer %struct + %var = OpVariable %ptr StorageBuffer +%ptr_float = OpTypePointer StorageBuffer %float + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %2 = OpAccessChain %ptr_float %var %int_0 + %3 = OpLoad %float %2 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("StorageBuffer id '3' is missing Binding decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, + VulkanStorageBufferMissingDescriptorSetSubFunctionBad) { + std::string spirv = R"( + OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer StorageBuffer %struct + %var = OpVariable %ptr StorageBuffer +%ptr_float = OpTypePointer StorageBuffer %float + %int = OpTypeInt 32 0 + %int_0 = OpConstant %int 0 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + %call = OpFunctionCall %void %2 + OpReturn + OpFunctionEnd + %2 = OpFunction %void None %voidfn + %label2 = OpLabel + %3 = OpAccessChain %ptr_float %var %int_0 + %4 = OpLoad %float %3 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("StorageBuffer id '3' is missing DescriptorSet decoration.\n" + "From Vulkan spec, section 14.5.2:\n" + "These variables must have DescriptorSet and Binding " + "decorations specified")); +} + +TEST_F(ValidateDecorations, + VulkanStorageBufferMissingDescriptorAndBindingUnusedGood) { + std::string spirv = R"( + OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct BufferBlock + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer StorageBuffer %struct + %var = OpVariable %ptr StorageBuffer + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateDecorations, UniformMissingDescriptorSetGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer Uniform %struct + %var = OpVariable %ptr Uniform + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, UniformMissingBindingGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + OpDecorate %var DescriptorSet 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer Uniform %struct + %var = OpVariable %ptr Uniform + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, UniformConstantMissingDescriptorSetGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %sampler = OpTypeSampler + %ptr = OpTypePointer UniformConstant %sampler + %var = OpVariable %ptr UniformConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, UniformConstantMissingBindingGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %var DescriptorSet 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %sampler = OpTypeSampler + %ptr = OpTypePointer UniformConstant %sampler + %var = OpVariable %ptr UniformConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, StorageBufferMissingDescriptorSetGood) { + std::string spirv = R"( + OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct BufferBlock + OpDecorate %var Binding 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer StorageBuffer %struct + %var = OpVariable %ptr StorageBuffer + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + +TEST_F(ValidateDecorations, StorageBufferMissingBindingGood) { + std::string spirv = R"( + OpCapability Shader + OpExtension "SPV_KHR_storage_buffer_storage_class" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct BufferBlock + OpDecorate %var DescriptorSet 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer StorageBuffer %struct + %var = OpVariable %ptr StorageBuffer + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()) + << getDiagnosticString(); +} + TEST_F(ValidateDecorations, StorageBufferStorageClassArrayBaseAlignmentGood) { // Spot check buffer rules when using StorageBuffer storage class with Block // decoration. @@ -3014,6 +4022,7 @@ TEST_F(ValidateDecorations, EntryPointVariableWrongStorageClass) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" %var +OpExecutionMode %1 OriginUpperLeft %void = OpTypeVoid %int = OpTypeInt 32 0 %ptr_int_Workgroup = OpTypePointer Workgroup %int @@ -3032,6 +4041,775 @@ OpFunctionEnd "Storage Class of Input(1) or Output(3). Found Storage " "Class 4 for Entry Point id 1.")); } + +TEST_F(ValidateDecorations, VulkanMemoryModelNonCoherent) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical VulkanKHR +OpDecorate %1 Coherent +%2 = OpTypeInt 32 0 +%3 = OpTypePointer StorageBuffer %2 +%1 = OpVariable %3 StorageBuffer +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Coherent decoration targeting 1[%1] is " + "banned when using the Vulkan memory model.")); +} + +TEST_F(ValidateDecorations, VulkanMemoryModelNoCoherentMember) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpMemberDecorate %1 0 Coherent +%2 = OpTypeInt 32 0 +%1 = OpTypeStruct %2 %2 +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Coherent decoration targeting 1[%_struct_1] (member index 0) " + "is banned when using the Vulkan memory model.")); +} + +TEST_F(ValidateDecorations, VulkanMemoryModelNoVolatile) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpMemoryModel Logical VulkanKHR +OpDecorate %1 Volatile +%2 = OpTypeInt 32 0 +%3 = OpTypePointer StorageBuffer %2 +%1 = OpVariable %3 StorageBuffer +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Volatile decoration targeting 1[%1] is banned when " + "using the Vulkan memory model.")); +} + +TEST_F(ValidateDecorations, VulkanMemoryModelNoVolatileMember) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpMemberDecorate %1 1 Volatile +%2 = OpTypeInt 32 0 +%1 = OpTypeStruct %2 %2 +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Volatile decoration targeting 1[%_struct_1] (member " + "index 1) is banned when using the Vulkan memory " + "model.")); +} + +TEST_F(ValidateDecorations, FPRoundingModeGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%float = OpTypeFloat 32 +%float_1_25 = OpConstant %float 1.25 +%half_ptr = OpTypePointer StorageBuffer %half +%half_ptr_var = OpVariable %half_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %half %float_1_25 +OpStore %half_ptr_var %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidateDecorations, FPRoundingModeVectorGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%float = OpTypeFloat 32 +%v2half = OpTypeVector %half 2 +%v2float = OpTypeVector %float 2 +%float_1_25 = OpConstant %float 1.25 +%floats = OpConstantComposite %v2float %float_1_25 %float_1_25 +%halfs_ptr = OpTypePointer StorageBuffer %v2half +%halfs_ptr_var = OpVariable %halfs_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %v2half %floats +OpStore %halfs_ptr_var %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidateDecorations, FPRoundingModeNotOpFConvert) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%short = OpTypeInt 16 1 +%int = OpTypeInt 32 1 +%int_17 = OpConstant %int 17 +%short_ptr = OpTypePointer StorageBuffer %short +%short_ptr_var = OpVariable %short_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpSConvert %short %int_17 +OpStore %short_ptr_var %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("FPRoundingMode decoration can be applied only to a " + "width-only conversion instruction for floating-point " + "object.")); +} + +TEST_F(ValidateDecorations, FPRoundingModeNoOpStoreGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%float = OpTypeFloat 32 +%float_1_25 = OpConstant %float 1.25 +%half_ptr = OpTypePointer StorageBuffer %half +%half_ptr_var = OpVariable %half_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %half %float_1_25 +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidateDecorations, FPRoundingModeFConvert64to16Good) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpCapability Float64 +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%double = OpTypeFloat 64 +%double_1_25 = OpConstant %double 1.25 +%half_ptr = OpTypePointer StorageBuffer %half +%half_ptr_var = OpVariable %half_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %half %double_1_25 +OpStore %half_ptr_var %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidateDecorations, FPRoundingModeNotStoreInFloat16) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpCapability Float64 +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%float = OpTypeFloat 32 +%double = OpTypeFloat 64 +%double_1_25 = OpConstant %double 1.25 +%float_ptr = OpTypePointer StorageBuffer %float +%float_ptr_var = OpVariable %float_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %float %double_1_25 +OpStore %float_ptr_var %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore storing through a " + "pointer to a 16-bit floating-point scalar or vector object.")); +} + +TEST_F(ValidateDecorations, FPRoundingModeBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%float = OpTypeFloat 32 +%float_1_25 = OpConstant %float 1.25 +%half_ptr = OpTypePointer Private %half +%half_ptr_var = OpVariable %half_ptr Private +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %half %float_1_25 +OpStore %half_ptr_var %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore in the StorageBuffer, Uniform, " + "PushConstant, Input, or Output Storage Classes.")); +} + +TEST_F(ValidateDecorations, FPRoundingModeMultipleOpStoreGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%float = OpTypeFloat 32 +%float_1_25 = OpConstant %float 1.25 +%half_ptr = OpTypePointer StorageBuffer %half +%half_ptr_var_0 = OpVariable %half_ptr StorageBuffer +%half_ptr_var_1 = OpVariable %half_ptr StorageBuffer +%half_ptr_var_2 = OpVariable %half_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %half %float_1_25 +OpStore %half_ptr_var_0 %_ +OpStore %half_ptr_var_1 %_ +OpStore %half_ptr_var_2 %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidateDecorations, FPRoundingModeMultipleUsesBad) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability StorageBuffer16BitAccess +OpExtension "SPV_KHR_storage_buffer_storage_class" +OpExtension "SPV_KHR_variable_pointers" +OpExtension "SPV_KHR_16bit_storage" +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %_ FPRoundingMode RTE +%half = OpTypeFloat 16 +%float = OpTypeFloat 32 +%float_1_25 = OpConstant %float 1.25 +%half_ptr = OpTypePointer StorageBuffer %half +%half_ptr_var_0 = OpVariable %half_ptr StorageBuffer +%half_ptr_var_1 = OpVariable %half_ptr StorageBuffer +%void = OpTypeVoid +%func = OpTypeFunction %void +%main = OpFunction %void None %func +%main_entry = OpLabel +%_ = OpFConvert %half %float_1_25 +OpStore %half_ptr_var_0 %_ +%result = OpFAdd %half %_ %_ +OpStore %half_ptr_var_1 %_ +OpReturn +OpFunctionEnd + )"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("FPRoundingMode decoration can be applied only to the " + "Object operand of an OpStore.")); +} + +TEST_F(ValidateDecorations, GroupDecorateTargetsDecorationGroup) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpDecorationGroup +OpGroupDecorate %1 %1 +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpGroupDecorate may not target OpDecorationGroup " + "'1[%1]'")); +} + +TEST_F(ValidateDecorations, GroupDecorateTargetsDecorationGroup2) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%1 = OpDecorationGroup +OpGroupDecorate %1 %2 %1 +%2 = OpTypeVoid +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpGroupDecorate may not target OpDecorationGroup " + "'1[%1]'")); +} + +TEST_F(ValidateDecorations, RecurseThroughRuntimeArray) { + const std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +OpDecorate %outer Block +OpMemberDecorate %inner 0 Offset 0 +OpMemberDecorate %inner 1 Offset 1 +OpDecorate %runtime ArrayStride 16 +OpMemberDecorate %outer 0 Offset 0 +%int = OpTypeInt 32 0 +%inner = OpTypeStruct %int %int +%runtime = OpTypeRuntimeArray %inner +%outer = OpTypeStruct %runtime +%outer_ptr = OpTypePointer Uniform %outer +%var = OpVariable %outer_ptr Uniform +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Structure id 2 decorated as Block for variable in Uniform " + "storage class must follow standard uniform buffer layout " + "rules: member 1 at offset 1 is not aligned to 4")); +} + +TEST_F(ValidateDecorations, EmptyStructAtNonZeroOffsetGood) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpExecutionMode %main LocalSize 1 1 1 +OpDecorate %struct Block +OpMemberDecorate %struct 0 Offset 0 +OpMemberDecorate %struct 1 Offset 16 +OpDecorate %var DescriptorSet 0 +OpDecorate %var Binding 0 +%void = OpTypeVoid +%float = OpTypeFloat 32 +%empty = OpTypeStruct +%struct = OpTypeStruct %float %empty +%ptr_struct_ubo = OpTypePointer Uniform %struct +%var = OpVariable %ptr_struct_ubo Uniform +%voidfn = OpTypeFunction %void +%main = OpFunction %void None %voidfn +%entry = OpLabel +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +// Uniform decoration + +TEST_F(ValidateDecorations, UniformDecorationGood) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical Simple +OpEntryPoint GLCompute %main "main" +OpExecutionMode %main LocalSize 1 1 1 +OpDecorate %int0 Uniform +OpDecorate %var Uniform +OpDecorate %val Uniform +%void = OpTypeVoid +%int = OpTypeInt 32 1 +%int0 = OpConstantNull %int +%intptr = OpTypePointer Private %int +%var = OpVariable %intptr Private +%fn = OpTypeFunction %void +%main = OpFunction %void None %fn +%entry = OpLabel +%val = OpLoad %int %var +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), Eq("")); +} + +TEST_F(ValidateDecorations, UniformDecorationTargetsTypeBad) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical Simple +OpEntryPoint GLCompute %main "main" +OpExecutionMode %main LocalSize 1 1 1 +OpDecorate %fn Uniform +%void = OpTypeVoid +%fn = OpTypeFunction %void +%main = OpFunction %void None %fn +%entry = OpLabel +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Uniform decoration applied to a non-object")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("%2 = OpTypeFunction %void")); +} + +TEST_F(ValidateDecorations, UniformDecorationTargetsVoidValueBad) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical Simple +OpEntryPoint GLCompute %main "main" +OpExecutionMode %main LocalSize 1 1 1 +OpName %call "call" +OpName %myfunc "myfunc" +OpDecorate %call Uniform +%void = OpTypeVoid +%fnty = OpTypeFunction %void +%myfunc = OpFunction %void None %fnty +%myfuncentry = OpLabel +OpReturn +OpFunctionEnd +%main = OpFunction %void None %fnty +%entry = OpLabel +%call = OpFunctionCall %void %myfunc +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Uniform decoration applied to a value with void type\n" + " %call = OpFunctionCall %void %myfunc")); +} + +TEST_F(ValidateDecorations, MultipleOffsetDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID '2', member '0' decorated with Offset multiple " + "times is not allowed.")); +} + +TEST_F(ValidateDecorations, MultipleArrayStrideDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %array ArrayStride 4 + OpDecorate %array ArrayStride 4 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 + %uint_4 = OpConstant %uint 4 + %array = OpTypeArray %float %uint_4 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID '2' decorated with ArrayStride multiple " + "times is not allowed.")); +} + +TEST_F(ValidateDecorations, MultipleMatrixStrideDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + OpMemberDecorate %struct 0 ColMajor + OpMemberDecorate %struct 0 MatrixStride 16 + OpMemberDecorate %struct 0 MatrixStride 16 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %fvec4 = OpTypeVector %float 4 + %fmat4 = OpTypeMatrix %fvec4 4 + %struct = OpTypeStruct %fmat4 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID '2', member '0' decorated with MatrixStride " + "multiple times is not allowed.")); +} + +TEST_F(ValidateDecorations, MultipleRowMajorDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + OpMemberDecorate %struct 0 MatrixStride 16 + OpMemberDecorate %struct 0 RowMajor + OpMemberDecorate %struct 0 RowMajor + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %fvec4 = OpTypeVector %float 4 + %fmat4 = OpTypeMatrix %fvec4 4 + %struct = OpTypeStruct %fmat4 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID '2', member '0' decorated with RowMajor multiple " + "times is not allowed.")); +} + +TEST_F(ValidateDecorations, MultipleColMajorDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + OpMemberDecorate %struct 0 MatrixStride 16 + OpMemberDecorate %struct 0 ColMajor + OpMemberDecorate %struct 0 ColMajor + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %fvec4 = OpTypeVector %float 4 + %fmat4 = OpTypeMatrix %fvec4 4 + %struct = OpTypeStruct %fmat4 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID '2', member '0' decorated with ColMajor multiple " + "times is not allowed.")); +} + +TEST_F(ValidateDecorations, RowMajorAndColMajorDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpMemberDecorate %struct 0 Offset 0 + OpMemberDecorate %struct 0 MatrixStride 16 + OpMemberDecorate %struct 0 ColMajor + OpMemberDecorate %struct 0 RowMajor + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %fvec4 = OpTypeVector %float 4 + %fmat4 = OpTypeMatrix %fvec4 4 + %struct = OpTypeStruct %fmat4 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID '2', member '0' decorated with both RowMajor and " + "ColMajor is not allowed.")); +} + +TEST_F(ValidateDecorations, BlockAndBufferBlockDecorationsOnSameID) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpDecorate %struct BufferBlock + OpMemberDecorate %struct 0 Offset 0 + OpMemberDecorate %struct 0 MatrixStride 16 + OpMemberDecorate %struct 0 RowMajor + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %fvec4 = OpTypeVector %float 4 + %fmat4 = OpTypeMatrix %fvec4 4 + %struct = OpTypeStruct %fmat4 + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateAndRetrieveValidationState()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "ID '2' decorated with both BufferBlock and Block is not allowed.")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_derivatives_test.cpp b/3rdparty/spirv-tools/test/val/val_derivatives_test.cpp index 93a70e87c..480042a7d 100644 --- a/3rdparty/spirv-tools/test/val/val_derivatives_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_derivatives_test.cpp @@ -44,6 +44,9 @@ OpCapability DerivativeControl << " %f32_var_input" << " %f32vec4_var_input" << "\n"; + if (execution_model == "Fragment") { + ss << "OpExecutionMode %main OriginUpperLeft\n"; + } ss << R"( %void = OpTypeVoid @@ -116,11 +119,9 @@ TEST_F(ValidateDerivatives, OpDPdxWrongResultType) { )"; CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("Expected Result Type to be float scalar or vector type: " - "DPdx")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 10[%v4float] cannot " + "be a type")); } TEST_F(ValidateDerivatives, OpDPdxWrongPType) { diff --git a/3rdparty/spirv-tools/test/val/val_ext_inst_test.cpp b/3rdparty/spirv-tools/test/val/val_ext_inst_test.cpp index 40126fd9d..d1505da45 100644 --- a/3rdparty/spirv-tools/test/val/val_ext_inst_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_ext_inst_test.cpp @@ -107,6 +107,9 @@ OpCapability Int64 << " %u32vec2_input" << " %u64_input" << "\n"; + if (execution_model == "Fragment") { + ss << "OpExecutionMode %main OriginUpperLeft\n"; + } ss << R"( %void = OpTypeVoid @@ -3332,7 +3335,7 @@ TEST_P(ValidateOpenCLStdUMul24Like, FloatResultType) { TEST_P(ValidateOpenCLStdUMul24Like, U64ResultType) { const std::string ext_inst_name = GetParam(); const std::string body = - "%val1 = OpExtInst %u64 %extinst " + ext_inst_name + " %u64_0 %u64\n"; + "%val1 = OpExtInst %u64 %extinst " + ext_inst_name + " %u64_0 %u64_0\n"; CompileSuccessfully(GenerateKernelCode(body)); ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); @@ -4130,10 +4133,9 @@ TEST_P(ValidateOpenCLStdVStoreHalfLike, PNotPointer) { } CompileSuccessfully(GenerateKernelCode(ss.str())); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpenCL.std " + ext_inst_name + - ": expected operand P to be a pointer")); + HasSubstr("Operand 89[%_ptr_Workgroup_half] cannot be a type")); } TEST_P(ValidateOpenCLStdVStoreHalfLike, ConstPointer) { @@ -4303,10 +4305,9 @@ TEST_P(ValidateOpenCLStdVLoadHalfLike, PNotPointer) { << " %u32_1 %f16_ptr_workgroup 2\n"; CompileSuccessfully(GenerateKernelCode(ss.str())); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpenCL.std " + ext_inst_name + - ": expected operand P to be a pointer")); + HasSubstr("Operand 89[%_ptr_Workgroup_half] cannot be a type")); } TEST_P(ValidateOpenCLStdVLoadHalfLike, OffsetWrongStorageType) { @@ -4476,10 +4477,10 @@ TEST_F(ValidateExtInst, VLoadNPNotPointer) { "%f32_ptr_uniform_constant 2\n"; CompileSuccessfully(GenerateKernelCode(ss.str())); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpenCL.std vloadn: expected operand P to be a pointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 120[%_ptr_UniformConstant_float] cannot be a " + "type")); } TEST_F(ValidateExtInst, VLoadNWrongStorageClass) { @@ -4589,10 +4590,10 @@ TEST_F(ValidateExtInst, VLoadHalfPNotPointer) { "%f16_ptr_uniform_constant\n"; CompileSuccessfully(GenerateKernelCode(ss.str())); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpenCL.std vload_half: expected operand P to be a pointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 114[%_ptr_UniformConstant_half] cannot be a " + "type")); } TEST_F(ValidateExtInst, VLoadHalfWrongStorageClass) { @@ -4743,10 +4744,9 @@ TEST_F(ValidateExtInst, VStoreNPNotPointer) { "%f32_ptr_generic\n"; CompileSuccessfully(GenerateKernelCode(ss.str())); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpenCL.std vstoren: expected operand P to be a pointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 124[%_ptr_Generic_float] cannot be a type")); } TEST_F(ValidateExtInst, VStoreNPNotGeneric) { @@ -5058,10 +5058,10 @@ TEST_F(ValidateExtInst, OpenCLStdPrintfFormatNotPointer) { )"; CompileSuccessfully(GenerateKernelCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpenCL.std printf: expected operand Format to be a pointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 134[%_ptr_UniformConstant_uchar] cannot be a " + "type")); } TEST_F(ValidateExtInst, OpenCLStdPrintfFormatNotUniformConstStorageClass) { @@ -5151,10 +5151,10 @@ TEST_F(ValidateExtInst, OpenCLStdPrefetchPtrNotPointer) { )"; CompileSuccessfully(GenerateKernelCode(body)); - ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpenCL.std prefetch: expected operand Ptr to be a pointer")); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 99[%_ptr_CrossWorkgroup_uint] cannot be a " + "type")); } TEST_F(ValidateExtInst, OpenCLStdPrefetchPtrNotCrossWorkgroup) { diff --git a/3rdparty/spirv-tools/test/val/val_extensions_test.cpp b/3rdparty/spirv-tools/test/val/val_extensions_test.cpp index b185c3ca7..3d6466d5c 100644 --- a/3rdparty/spirv-tools/test/val/val_extensions_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_extensions_test.cpp @@ -88,6 +88,29 @@ TEST_P(ValidateUnknownExtensions, FailSilently) { EXPECT_THAT(getDiagnosticString(), HasSubstr(GetErrorString(extension))); } +TEST_F(ValidateUnknownExtensions, HitMaxNumOfWarnings) { + const std::string str = + std::string("OpCapability Shader\n") + "OpCapability Linkage\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpExtension \"bad_ext\"\n" + "OpExtension \"bad_ext\"\n" + + "OpMemoryModel Logical GLSL450"; + CompileSuccessfully(str.c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Other warnings have been suppressed.")); +} + TEST_F(ValidateExtensionCapabilities, DeclCapabilitySuccess) { const std::string str = "OpCapability Shader\nOpCapability Linkage\nOpCapability DeviceGroup\n" diff --git a/3rdparty/spirv-tools/test/val/val_id_test.cpp b/3rdparty/spirv-tools/test/val/val_id_test.cpp index 6d907b188..25fac88d1 100644 --- a/3rdparty/spirv-tools/test/val/val_id_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_id_test.cpp @@ -37,6 +37,19 @@ using ::testing::ValuesIn; using ValidateIdWithMessage = spvtest::ValidateBase; +std::string kOpCapabilitySetupWithoutVector16 = R"( + OpCapability Shader + OpCapability Linkage + OpCapability Addresses + OpCapability Int8 + OpCapability Int16 + OpCapability Int64 + OpCapability Float64 + OpCapability LiteralSampler + OpCapability Pipes + OpCapability DeviceEnqueue +)"; + std::string kOpCapabilitySetup = R"( OpCapability Shader OpCapability Linkage @@ -51,7 +64,18 @@ std::string kOpCapabilitySetup = R"( OpCapability Vector16 )"; -std::string kGLSL450MemoryModel = kOpCapabilitySetup + R"( +std::string kOpVariablePtrSetUp = R"( + OpCapability VariablePointers + OpExtension "SPV_KHR_variable_pointers" +)"; + +std::string kGLSL450MemoryModel = + kOpCapabilitySetup + kOpVariablePtrSetUp + R"( + OpMemoryModel Logical GLSL450 +)"; + +std::string kGLSL450MemoryModelWithoutVector16 = + kOpCapabilitySetupWithoutVector16 + kOpVariablePtrSetUp + R"( OpMemoryModel Logical GLSL450 )"; @@ -181,7 +205,7 @@ TEST_F(ValidateIdWithMessage, OpMemberNameTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpMemberName Type '1[foo]' is not a struct type.")); + HasSubstr("OpMemberName Type '1[%uint]' is not a struct type.")); } TEST_F(ValidateIdWithMessage, OpMemberNameMemberBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -192,8 +216,8 @@ TEST_F(ValidateIdWithMessage, OpMemberNameMemberBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpMemberName Member '1[foo]' index is larger than " - "Type '1[foo]'s member count.")); + HasSubstr("OpMemberName Member '1[%_struct_1]' index is larger " + "than Type '1[%_struct_1]'s member count.")); } TEST_F(ValidateIdWithMessage, OpLineGood) { @@ -215,7 +239,7 @@ TEST_F(ValidateIdWithMessage, OpLineFileBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpLine Target '1' is not an OpString.")); + HasSubstr("OpLine Target '1[%uint]' is not an OpString.")); } TEST_F(ValidateIdWithMessage, OpDecorateGood) { @@ -237,7 +261,7 @@ OpDecorate %1 GLSLShared)"; TEST_F(ValidateIdWithMessage, OpMemberDecorateGood) { std::string spirv = kGLSL450MemoryModel + R"( - OpMemberDecorate %2 0 Uniform + OpMemberDecorate %2 0 RelaxedPrecision %1 = OpTypeInt 32 0 %2 = OpTypeStruct %1 %1)"; CompileSuccessfully(spirv.c_str()); @@ -245,32 +269,31 @@ TEST_F(ValidateIdWithMessage, OpMemberDecorateGood) { } TEST_F(ValidateIdWithMessage, OpMemberDecorateBad) { std::string spirv = kGLSL450MemoryModel + R"( - OpMemberDecorate %1 0 Uniform + OpMemberDecorate %1 0 RelaxedPrecision %1 = OpTypeInt 32 0)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr( - "OpMemberDecorate Structure type '1' is not a struct type.")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpMemberDecorate Structure type '1[%uint]' is " + "not a struct type.")); } TEST_F(ValidateIdWithMessage, OpMemberDecorateMemberBad) { std::string spirv = kGLSL450MemoryModel + R"( - OpMemberDecorate %1 3 Uniform + OpMemberDecorate %1 3 RelaxedPrecision %int = OpTypeInt 32 0 %1 = OpTypeStruct %int %int)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("Index 3 provided in OpMemberDecorate for struct " - "1 is out of bounds. The structure has 2 members. " - "Largest valid index is 1.")); + "1[%_struct_1] is out of bounds. The structure has 2 " + "members. Largest valid index is 1.")); } TEST_F(ValidateIdWithMessage, OpGroupDecorateGood) { std::string spirv = kGLSL450MemoryModel + R"( %1 = OpDecorationGroup - OpDecorate %1 Uniform + OpDecorate %1 RelaxedPrecision OpDecorate %1 GLSLShared OpGroupDecorate %1 %3 %4 %2 = OpTypeInt 32 0 @@ -282,7 +305,7 @@ TEST_F(ValidateIdWithMessage, OpGroupDecorateGood) { TEST_F(ValidateIdWithMessage, OpDecorationGroupBad) { std::string spirv = kGLSL450MemoryModel + R"( %1 = OpDecorationGroup - OpDecorate %1 Uniform + OpDecorate %1 RelaxedPrecision OpDecorate %1 GLSLShared OpMemberDecorate %1 0 Constant )"; @@ -305,13 +328,13 @@ TEST_F(ValidateIdWithMessage, OpGroupDecorateDecorationGroupBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpGroupDecorate Decoration group '1' is not a " - "decoration group.")); + HasSubstr("OpGroupDecorate Decoration group '1[%1]' is not " + "a decoration group.")); } TEST_F(ValidateIdWithMessage, OpGroupDecorateTargetBad) { std::string spirv = kGLSL450MemoryModel + R"( %1 = OpDecorationGroup - OpDecorate %1 Uniform + OpDecorate %1 RelaxedPrecision OpDecorate %1 GLSLShared OpGroupDecorate %1 %3 %2 = OpTypeInt 32 0)"; @@ -331,8 +354,8 @@ TEST_F(ValidateIdWithMessage, OpGroupMemberDecorateDecorationGroupBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpGroupMemberDecorate Decoration group '1' is " - "not a decoration group.")); + HasSubstr("OpGroupMemberDecorate Decoration group '1[%1]' " + "is not a decoration group.")); } TEST_F(ValidateIdWithMessage, OpGroupMemberDecorateIdNotStructBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -342,8 +365,8 @@ TEST_F(ValidateIdWithMessage, OpGroupMemberDecorateIdNotStructBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpGroupMemberDecorate Structure type '2' is not " - "a struct type.")); + HasSubstr("OpGroupMemberDecorate Structure type '2[%uint]' " + "is not a struct type.")); } TEST_F(ValidateIdWithMessage, OpGroupMemberDecorateIndexOutOfBoundBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -357,8 +380,8 @@ TEST_F(ValidateIdWithMessage, OpGroupMemberDecorateIndexOutOfBoundBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("Index 3 provided in OpGroupMemberDecorate for struct " - " 2 is out of bounds. The structure has 3 members. " - "Largest valid index is 2.")); + " 2[%_struct_2] is out of bounds. The structure " + "has 3 members. Largest valid index is 2.")); } // TODO: OpExtInst @@ -382,9 +405,9 @@ TEST_F(ValidateIdWithMessage, OpEntryPointFunctionBad) { %1 = OpTypeVoid)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpEntryPoint Entry Point '1' is not a function.")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpEntryPoint Entry Point '1[%void]' is not a " + "function.")); } TEST_F(ValidateIdWithMessage, OpEntryPointParameterCountBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -398,8 +421,8 @@ TEST_F(ValidateIdWithMessage, OpEntryPointParameterCountBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpEntryPoint Entry Point '1's function parameter " - "count is not zero")); + HasSubstr("OpEntryPoint Entry Point '1[%1]'s function " + "parameter count is not zero")); } TEST_F(ValidateIdWithMessage, OpEntryPointReturnTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -414,8 +437,8 @@ TEST_F(ValidateIdWithMessage, OpEntryPointReturnTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpEntryPoint Entry Point '1's function return " - "type is not void.")); + HasSubstr("OpEntryPoint Entry Point '1[%1]'s function " + "return type is not void.")); } TEST_F(ValidateIdWithMessage, OpEntryPointInterfaceIsNotVariableTypeBad) { @@ -424,6 +447,8 @@ TEST_F(ValidateIdWithMessage, OpEntryPointInterfaceIsNotVariableTypeBad) { OpCapability Geometry OpMemoryModel Logical GLSL450 OpEntryPoint Geometry %main "main" %ptr_builtin_1 + OpExecutionMode %main InputPoints + OpExecutionMode %main OutputPoints OpMemberDecorate %struct_1 0 BuiltIn InvocationId %int = OpTypeInt 32 1 %void = OpTypeVoid @@ -448,6 +473,8 @@ TEST_F(ValidateIdWithMessage, OpEntryPointInterfaceStorageClassBad) { OpCapability Geometry OpMemoryModel Logical GLSL450 OpEntryPoint Geometry %main "main" %in_1 + OpExecutionMode %main InputPoints + OpExecutionMode %main OutputPoints OpMemberDecorate %struct_1 0 BuiltIn InvocationId %int = OpTypeInt 32 1 %void = OpTypeVoid @@ -494,8 +521,8 @@ TEST_F(ValidateIdWithMessage, OpExecutionModeEntryPointMissing) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpExecutionMode Entry Point '1' is not the Entry " - "Point operand of an OpEntryPoint.")); + HasSubstr("OpExecutionMode Entry Point '1[%1]' is not the " + "Entry Point operand of an OpEntryPoint.")); } TEST_F(ValidateIdWithMessage, OpExecutionModeEntryPointBad) { @@ -513,8 +540,8 @@ TEST_F(ValidateIdWithMessage, OpExecutionModeEntryPointBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpExecutionMode Entry Point '2' is not the Entry " - "Point operand of an OpEntryPoint.")); + HasSubstr("OpExecutionMode Entry Point '2[%2]' is not the " + "Entry Point operand of an OpEntryPoint.")); } TEST_F(ValidateIdWithMessage, OpTypeVectorFloat) { @@ -558,7 +585,76 @@ TEST_F(ValidateIdWithMessage, OpTypeVectorComponentTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpTypeVector Component Type '2' is not a scalar type.")); + HasSubstr("OpTypeVector Component Type " + "'2[%_ptr_UniformConstant_float]' is not a scalar type.")); +} + +TEST_F(ValidateIdWithMessage, OpTypeVectorColumnCountLessThanTwoBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 1)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Illegal number of components (1) for TypeVector\n %v1float = " + "OpTypeVector %float 1\n")); +} + +TEST_F(ValidateIdWithMessage, OpTypeVectorColumnCountGreaterThanFourBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 5)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Illegal number of components (5) for TypeVector\n %v5float = " + "OpTypeVector %float 5\n")); +} + +TEST_F(ValidateIdWithMessage, OpTypeVectorColumnCountEightWithoutVector16Bad) { + std::string spirv = kGLSL450MemoryModelWithoutVector16 + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 8)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Having 8 components for TypeVector requires the Vector16 " + "capability\n %v8float = OpTypeVector %float 8\n")); +} + +TEST_F(ValidateIdWithMessage, + OpTypeVectorColumnCountSixteenWithoutVector16Bad) { + std::string spirv = kGLSL450MemoryModelWithoutVector16 + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 16)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Having 16 components for TypeVector requires the Vector16 " + "capability\n %v16float = OpTypeVector %float 16\n")); +} + +TEST_F(ValidateIdWithMessage, OpTypeVectorColumnCountOfEightWithVector16Good) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 8)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, + OpTypeVectorColumnCountOfSixteenWithVector16Good) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 16)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } TEST_F(ValidateIdWithMessage, OpTypeMatrixGood) { @@ -569,14 +665,56 @@ TEST_F(ValidateIdWithMessage, OpTypeMatrixGood) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } -TEST_F(ValidateIdWithMessage, OpTypeMatrixColumnTypeBad) { + +TEST_F(ValidateIdWithMessage, OpTypeMatrixColumnTypeNonVectorBad) { std::string spirv = kGLSL450MemoryModel + R"( -%1 = OpTypeInt 32 0 +%1 = OpTypeFloat 32 %2 = OpTypeMatrix %1 3)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("Columns in a matrix must be of type vector.")); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("olumns in a matrix must be of type vector.\n %mat3float = " + "OpTypeMatrix %float 3\n")); +} + +TEST_F(ValidateIdWithMessage, OpTypeMatrixVectorTypeNonFloatBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeInt 16 0 +%2 = OpTypeVector %1 2 +%3 = OpTypeMatrix %2 2)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Matrix types can only be parameterized with floating-point " + "types.\n %mat2v2ushort = OpTypeMatrix %v2ushort 2\n")); +} + +TEST_F(ValidateIdWithMessage, OpTypeMatrixColumnCountLessThanTwoBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 2 +%3 = OpTypeMatrix %2 1)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Matrix types can only be parameterized as having only 2, 3, " + "or 4 columns.\n %mat1v2float = OpTypeMatrix %v2float 1\n")); +} + +TEST_F(ValidateIdWithMessage, OpTypeMatrixColumnCountGreaterThanFourBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeFloat 32 +%2 = OpTypeVector %1 2 +%3 = OpTypeMatrix %2 8)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Matrix types can only be parameterized as having only 2, 3, " + "or 4 columns.\n %mat8v2float = OpTypeMatrix %v2float 8\n")); } TEST_F(ValidateIdWithMessage, OpTypeSamplerGood) { @@ -604,7 +742,8 @@ TEST_F(ValidateIdWithMessage, OpTypeArrayElementTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpTypeArray Element Type '2' is not a type.")); + HasSubstr("OpTypeArray Element Type '2[%uint_1]' is not a " + "type.")); } // Signed or unsigned. @@ -645,7 +784,8 @@ class OpTypeArrayLengthTest spvValidate(ScopedContext().context, &cbinary, &diagnostic_); if (status != SPV_SUCCESS) { spvDiagnosticPrint(diagnostic_); - EXPECT_THAT(std::string(diagnostic_->error), HasSubstr(expected_err)); + EXPECT_THAT(std::string(diagnostic_->error), + testing::ContainsRegex(expected_err)); } return status; } @@ -679,35 +819,35 @@ TEST_P(OpTypeArrayLengthTest, LengthPositive) { TEST_P(OpTypeArrayLengthTest, LengthZero) { const int width = GetParam(); - EXPECT_EQ( - SPV_ERROR_INVALID_ID, - Val(CompileSuccessfully(MakeArrayLength("0", kSigned, width)), - "OpTypeArray Length '2' default value must be at least 1.")); - EXPECT_EQ( - SPV_ERROR_INVALID_ID, - Val(CompileSuccessfully(MakeArrayLength("0", kUnsigned, width)), - "OpTypeArray Length '2' default value must be at least 1.")); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + Val(CompileSuccessfully(MakeArrayLength("0", kSigned, width)), + "OpTypeArray Length '2\\[%.*\\]' default value must be at " + "least 1.")); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + Val(CompileSuccessfully(MakeArrayLength("0", kUnsigned, width)), + "OpTypeArray Length '2\\[%.*\\]' default value must be at " + "least 1.")); } TEST_P(OpTypeArrayLengthTest, LengthNegative) { const int width = GetParam(); - EXPECT_EQ( - SPV_ERROR_INVALID_ID, - Val(CompileSuccessfully(MakeArrayLength("-1", kSigned, width)), - "OpTypeArray Length '2' default value must be at least 1.")); - EXPECT_EQ( - SPV_ERROR_INVALID_ID, - Val(CompileSuccessfully(MakeArrayLength("-2", kSigned, width)), - "OpTypeArray Length '2' default value must be at least 1.")); - EXPECT_EQ( - SPV_ERROR_INVALID_ID, - Val(CompileSuccessfully(MakeArrayLength("-123", kSigned, width)), - "OpTypeArray Length '2' default value must be at least 1.")); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + Val(CompileSuccessfully(MakeArrayLength("-1", kSigned, width)), + "OpTypeArray Length '2\\[%.*\\]' default value must be at " + "least 1.")); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + Val(CompileSuccessfully(MakeArrayLength("-2", kSigned, width)), + "OpTypeArray Length '2\\[%.*\\]' default value must be at " + "least 1.")); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + Val(CompileSuccessfully(MakeArrayLength("-123", kSigned, width)), + "OpTypeArray Length '2\\[%.*\\]' default value must be at " + "least 1.")); const std::string neg_max = "0x8" + std::string(width / 4 - 1, '0'); - EXPECT_EQ( - SPV_ERROR_INVALID_ID, - Val(CompileSuccessfully(MakeArrayLength(neg_max, kSigned, width)), - "OpTypeArray Length '2' default value must be at least 1.")); + EXPECT_EQ(SPV_ERROR_INVALID_ID, + Val(CompileSuccessfully(MakeArrayLength(neg_max, kSigned, width)), + "OpTypeArray Length '2\\[%.*\\]' default value must be at " + "least 1.")); } // The only valid widths for integers are 8, 16, 32, and 64. @@ -728,7 +868,7 @@ TEST_F(ValidateIdWithMessage, OpTypeArrayLengthNull) { EXPECT_THAT( getDiagnosticString(), HasSubstr( - "OpTypeArray Length '2' default value must be at least 1.")); + "OpTypeArray Length '2[%2]' default value must be at least 1.")); } TEST_F(ValidateIdWithMessage, OpTypeArrayLengthSpecConst) { @@ -767,7 +907,8 @@ TEST_F(ValidateIdWithMessage, OpTypeRuntimeArrayBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpTypeRuntimeArray Element Type '2' is not a type.")); + HasSubstr("OpTypeRuntimeArray Element Type '2[%uint_0]' is not a " + "type.")); } // TODO: Object of this type can only be created with OpVariable using the // Unifrom Storage Class @@ -790,7 +931,8 @@ TEST_F(ValidateIdWithMessage, OpTypeStructMemberTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpTypeStruct Member Type '3' is not a type.")); + HasSubstr("OpTypeStruct Member Type '3[%double_0]' is not " + "a type.")); } TEST_F(ValidateIdWithMessage, OpTypePointerGood) { @@ -808,7 +950,8 @@ TEST_F(ValidateIdWithMessage, OpTypePointerBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpTypePointer Type '2' is not a type.")); + HasSubstr("OpTypePointer Type '2[%uint_0]' is not a " + "type.")); } TEST_F(ValidateIdWithMessage, OpTypeFunctionGood) { @@ -826,7 +969,8 @@ TEST_F(ValidateIdWithMessage, OpTypeFunctionReturnTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpTypeFunction Return Type '2' is not a type.")); + HasSubstr("OpTypeFunction Return Type '2[%uint_0]' is not " + "a type.")); } TEST_F(ValidateIdWithMessage, OpTypeFunctionParameterBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -838,7 +982,20 @@ TEST_F(ValidateIdWithMessage, OpTypeFunctionParameterBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpTypeFunction Parameter Type '3' is not a type.")); + HasSubstr("OpTypeFunction Parameter Type '3[%uint_0]' is not a " + "type.")); +} + +TEST_F(ValidateIdWithMessage, OpTypeFunctionParameterTypeVoidBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%4 = OpTypeFunction %1 %2 %1)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpTypeFunction Parameter Type '1[%void]' cannot " + "be OpTypeVoid.")); } TEST_F(ValidateIdWithMessage, OpTypePipeGood) { @@ -865,7 +1022,8 @@ TEST_F(ValidateIdWithMessage, OpConstantTrueBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpConstantTrue Result Type '1' is not a boolean type.")); + HasSubstr("OpConstantTrue Result Type '1[%void]' is not a boolean " + "type.")); } TEST_F(ValidateIdWithMessage, OpConstantFalseGood) { @@ -883,7 +1041,8 @@ TEST_F(ValidateIdWithMessage, OpConstantFalseBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpConstantFalse Result Type '1' is not a boolean type.")); + HasSubstr("OpConstantFalse Result Type '1[%void]' is not a boolean " + "type.")); } TEST_F(ValidateIdWithMessage, OpConstantGood) { @@ -933,8 +1092,8 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeVectorResultTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr( - "OpConstantComposite Result Type '1' is not a composite type.")); + HasSubstr("OpConstantComposite Result Type '1[%float]' is not a " + "composite type.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeVectorConstituentTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -948,8 +1107,9 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeVectorConstituentTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '5's type does not match " - "Result Type '2's vector element type.")); + HasSubstr("OpConstantComposite Constituent '5[%uint_42]'s type " + "does not match Result Type '2[%v4float]'s vector " + "element type.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeVectorConstituentUndefTypeBad) { @@ -964,8 +1124,8 @@ TEST_F(ValidateIdWithMessage, EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '5's type does not match " - "Result Type '2's vector element type.")); + HasSubstr("OpConstantComposite Constituent '5[%5]'s type does not " + "match Result Type '2[%v4float]'s vector element type.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeMatrixGood) { std::string spirv = kGLSL450MemoryModel + R"( @@ -1013,9 +1173,9 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeMatrixConstituentTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '10' vector " - "component count does not match Result Type '4's " - "vector component count.")); + HasSubstr("OpConstantComposite Constituent '10[%10]' vector " + "component count does not match Result Type " + "'4[%mat4v4float]'s vector component count.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeMatrixConstituentUndefTypeBad) { @@ -1034,9 +1194,9 @@ TEST_F(ValidateIdWithMessage, CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '10' vector " - "component count does not match Result Type '4's " - "vector component count.")); + HasSubstr("OpConstantComposite Constituent '10[%10]' vector " + "component count does not match Result Type " + "'4[%mat4v4float]'s vector component count.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayGood) { std::string spirv = kGLSL450MemoryModel + R"( @@ -1057,16 +1217,30 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayWithUndefGood) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } -TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstConstituentBad) { + +TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstConstituentTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( %1 = OpTypeInt 32 0 %2 = OpConstant %1 4 %3 = OpTypeArray %1 %2 %4 = OpConstantComposite %3 %2 %2 %2 %1)"; // Uses a type as operand + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 1[%uint] cannot be a " + "type")); +} +TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstConstituentBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%1 = OpTypeInt 32 0 +%2 = OpConstant %1 4 +%3 = OpTypeArray %1 %2 +%4 = OpTypePointer Uniform %1 +%5 = OpVariable %4 Uniform +%6 = OpConstantComposite %3 %2 %2 %2 %5)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '1' is not a " + HasSubstr("OpConstantComposite Constituent '5[%5]' is not a " "constant or undef.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstituentTypeBad) { @@ -1080,8 +1254,10 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstituentTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '5's type does " - "not match Result Type '3's array element type.")); + HasSubstr("OpConstantComposite Constituent " + "'5[%float_3_1400001]'s type does not match Result " + "Type '3[%_arr_uint_uint_4]'s array element " + "type.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstituentUndefTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -1094,8 +1270,10 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeArrayConstituentUndefTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '5's type does " - "not match Result Type '3's array element type.")); + HasSubstr("OpConstantComposite Constituent " + "'5[%5]'s type does not match Result " + "Type '3[%_arr_uint_uint_4]'s array element " + "type.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeStructGood) { std::string spirv = kGLSL450MemoryModel + R"( @@ -1130,8 +1308,9 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeStructMemberTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '5' type does " - "not match the Result Type '3's member type.")); + HasSubstr("OpConstantComposite Constituent " + "'5[%ulong_4300000000]' type does not match the " + "Result Type '3[%_struct_3]'s member type.")); } TEST_F(ValidateIdWithMessage, OpConstantCompositeStructMemberUndefTypeBad) { @@ -1145,8 +1324,9 @@ TEST_F(ValidateIdWithMessage, OpConstantCompositeStructMemberUndefTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpConstantComposite Constituent '5' type does " - "not match the Result Type '3's member type.")); + HasSubstr("OpConstantComposite Constituent '5[%5]' type " + "does not match the Result Type '3[%_struct_3]'s " + "member type.")); } TEST_F(ValidateIdWithMessage, OpConstantSamplerGood) { @@ -1166,7 +1346,8 @@ TEST_F(ValidateIdWithMessage, OpConstantSamplerResultTypeBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr( - "OpConstantSampler Result Type '1' is not a sampler type.")); + "OpConstantSampler Result Type '1[%float]' is not a sampler " + "type.")); } TEST_F(ValidateIdWithMessage, OpConstantNullGood) { @@ -1213,8 +1394,8 @@ TEST_F(ValidateIdWithMessage, OpConstantNullBasicBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr( - "OpConstantNull Result Type '1' cannot have a null value.")); + HasSubstr("OpConstantNull Result Type '1[%void]' cannot have a null " + "value.")); } TEST_F(ValidateIdWithMessage, OpConstantNullArrayBad) { @@ -1229,7 +1410,8 @@ TEST_F(ValidateIdWithMessage, OpConstantNullArrayBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr( - "OpConstantNull Result Type '4' cannot have a null value.")); + "OpConstantNull Result Type '4[%_arr_2_uint_4]' cannot have a " + "null value.")); } TEST_F(ValidateIdWithMessage, OpConstantNullStructBad) { @@ -1239,10 +1421,9 @@ TEST_F(ValidateIdWithMessage, OpConstantNullStructBad) { %4 = OpConstantNull %3)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr( - "OpConstantNull Result Type '2' cannot have a null value.")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpConstantNull Result Type '2[%_struct_2]' " + "cannot have a null value.")); } TEST_F(ValidateIdWithMessage, OpConstantNullRuntimeArrayBad) { @@ -1255,7 +1436,8 @@ TEST_F(ValidateIdWithMessage, OpConstantNullRuntimeArrayBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr( - "OpConstantNull Result Type '2' cannot have a null value.")); + "OpConstantNull Result Type '2[%_runtimearr_bool]' cannot have " + "a null value.")); } TEST_F(ValidateIdWithMessage, OpSpecConstantTrueGood) { @@ -1361,9 +1543,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeVectorConstituentTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '5's type " - "does not match Result Type '2's vector element " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent " + "'5[%uint_42]'s type does not match Result Type " + "'2[%v4float]'s vector element type.")); } // Invalid: Constituent is not a constant @@ -1374,12 +1556,14 @@ TEST_F(ValidateIdWithMessage, %2 = OpTypeVector %1 4 %3 = OpTypeInt 32 0 %4 = OpSpecConstant %1 3.14 -%6 = OpSpecConstantComposite %2 %3 %4 %4 %4)"; +%5 = OpTypePointer Uniform %1 +%6 = OpVariable %5 Uniform +%7 = OpSpecConstantComposite %2 %6 %4 %4 %4)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '3' is not a " - "constant or undef.")); + HasSubstr("OpSpecConstantComposite Constituent '6[%6]' is " + "not a constant or undef.")); } // Invalid: Vector contains a mix of Undef-int and Float. @@ -1395,9 +1579,9 @@ TEST_F(ValidateIdWithMessage, CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '5's type " - "does not match Result Type '2's vector element " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent '5[%5]'s " + "type does not match Result Type '2[%v4float]'s " + "vector element type.")); } // Invalid: Vector expects 3 components, but 4 specified. @@ -1412,8 +1596,8 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeVectorNumComponentsBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("OpSpecConstantComposite Constituent count does " - "not match Result Type '2's vector component " - "count.")); + "not match Result Type '2[%v3float]'s vector " + "component count.")); } // Valid: 4x4 matrix of floats @@ -1467,9 +1651,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeMatrixConstituentTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '10' vector " - "component count does not match Result Type '4's " - "vector component count.")); + HasSubstr("OpSpecConstantComposite Constituent '10[%10]' " + "vector component count does not match Result Type " + " '4[%mat4v4float]'s vector component count.")); } // Invalid: Matrix type expects 4 columns but only 3 specified. @@ -1489,7 +1673,8 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeMatrixNumColsBad) { EXPECT_THAT( getDiagnosticString(), HasSubstr("OpSpecConstantComposite Constituent count does " - "not match Result Type '3's matrix column count.")); + "not match Result Type '3[%mat4v4float]'s matrix column " + "count.")); } // Invalid: Composite contains a non-const/undef component @@ -1501,12 +1686,14 @@ TEST_F(ValidateIdWithMessage, %3 = OpTypeVector %1 4 %4 = OpTypeMatrix %3 4 %5 = OpSpecConstantComposite %3 %2 %2 %2 %2 - %6 = OpSpecConstantComposite %4 %5 %5 %5 %1)"; + %6 = OpTypePointer Uniform %1 + %7 = OpVariable %6 Uniform + %8 = OpSpecConstantComposite %4 %5 %5 %5 %7)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '1' is not a " - "constant composite or undef.")); + HasSubstr("OpSpecConstantComposite Constituent '7[%7]' is " + "not a constant composite or undef.")); } // Invalid: Composite contains a column that is *not* a vector (it's an array) @@ -1525,9 +1712,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeMatrixColTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '8' type " - "does not match Result Type '7's matrix column " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent '8[%8]' type " + "does not match Result Type '7[%mat4v4float]'s " + "matrix column type.")); } // Invalid: Matrix with an Undef column of the wrong size. @@ -1548,9 +1735,9 @@ TEST_F(ValidateIdWithMessage, CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '10' vector " - "component count does not match Result Type '4's " - "vector component count.")); + HasSubstr("OpSpecConstantComposite Constituent '10[%10]' " + "vector component count does not match Result Type " + " '4[%mat4v4float]'s vector component count.")); } // Invalid: Matrix in which some columns are Int and some are Float. @@ -1569,9 +1756,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeMatrixColumnTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '8' " - "component type does not match Result Type '5's " - "matrix column component type.")); + HasSubstr("OpSpecConstantComposite Constituent '8[%8]' " + "component type does not match Result Type " + "'5[%mat2v2float]'s matrix column component type.")); } // Valid: Array of integers @@ -1599,7 +1786,8 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeArrayNumComponentsBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("OpSpecConstantComposite Constituent count does not " - "match Result Type '3's array length.")); + "match Result Type '3[%_arr_uint_uint_4]'s array " + "length.")); } // Valid: Array of Integers and Undef-int @@ -1620,12 +1808,14 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeArrayConstConstituentBad) { %1 = OpTypeInt 32 0 %2 = OpConstant %1 4 %3 = OpTypeArray %1 %2 -%4 = OpSpecConstantComposite %3 %2 %2 %2 %1)"; +%4 = OpTypePointer Uniform %1 +%5 = OpVariable %4 Uniform +%6 = OpSpecConstantComposite %3 %2 %2 %2 %5)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '1' is not a " - "constant or undef.")); + HasSubstr("OpSpecConstantComposite Constituent '5[%5]' is " + "not a constant or undef.")); } // Invalid: Array has a mix of Int and Float components. @@ -1640,9 +1830,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeArrayConstituentTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '5's type " - "does not match Result Type '3's array element " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent '5[%5]'s " + "type does not match Result Type " + "'3[%_arr_uint_uint_4]'s array element type.")); } // Invalid: Array has a mix of Int and Undef-float. @@ -1658,9 +1848,9 @@ TEST_F(ValidateIdWithMessage, CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '5's type " - "does not match Result Type '3's array element " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent '5[%5]'s " + "type does not match Result Type " + "'3[%_arr_uint_2]'s array element type.")); } // Valid: Struct of {Int32,Int32,Int64}. @@ -1688,9 +1878,9 @@ TEST_F(ValidateIdWithMessage, CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '2' count " - "does not match Result Type '2's struct member " - "count.")); + HasSubstr("OpSpecConstantComposite Constituent " + "'2[%_struct_2]' count does not match Result Type " + " '2[%_struct_2]'s struct member count.")); } // Valid: Struct uses Undef-int64. @@ -1714,12 +1904,14 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeStructNonConstBad) { %3 = OpTypeStruct %1 %1 %2 %4 = OpSpecConstant %1 42 %5 = OpUndef %2 -%6 = OpSpecConstantComposite %3 %4 %1 %5)"; +%6 = OpTypePointer Uniform %1 +%7 = OpVariable %6 Uniform +%8 = OpSpecConstantComposite %3 %4 %7 %5)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '1' is not a " - "constant or undef.")); + HasSubstr("OpSpecConstantComposite Constituent '7[%7]' is " + "not a constant or undef.")); } // Invalid: Struct component type does not match expected specialization type. @@ -1735,9 +1927,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeStructMemberTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '5' type " - "does not match the Result Type '3's member " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent '5[%5]' type " + "does not match the Result Type '3[%_struct_3]'s " + "member type.")); } // Invalid: Undef-int64 used when Int32 was expected. @@ -1752,9 +1944,9 @@ TEST_F(ValidateIdWithMessage, OpSpecConstantCompositeStructMemberUndefTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpSpecConstantComposite Constituent '5' type " - "does not match the Result Type '3's member " - "type.")); + HasSubstr("OpSpecConstantComposite Constituent '5[%5]' type " + "does not match the Result Type '3[%_struct_3]'s " + "member type.")); } // TODO: OpSpecConstantOp @@ -1781,8 +1973,9 @@ TEST_F(ValidateIdWithMessage, OpVariableInitializerGlobalVariableGood) { %1 = OpTypeInt 32 0 %2 = OpTypePointer Uniform %1 %3 = OpVariable %2 Uniform -%4 = OpTypePointer Uniform %2 ; pointer to pointer -%5 = OpVariable %4 Uniform %3)"; +%4 = OpTypePointer Private %2 ; pointer to pointer +%5 = OpVariable %4 Private %3 +)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } @@ -1795,7 +1988,8 @@ TEST_F(ValidateIdWithMessage, OpVariableResultTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpVariable Result Type '1' is not a pointer type.")); + HasSubstr("OpVariable Result Type '1[%uint]' is not a pointer " + "type.")); } TEST_F(ValidateIdWithMessage, OpVariableInitializerIsTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -1804,9 +1998,8 @@ TEST_F(ValidateIdWithMessage, OpVariableInitializerIsTypeBad) { %3 = OpVariable %2 Input %2)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpVariable Initializer '2' is not a constant or " - "module-scope variable")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 2[%_ptr_Input_uint] " + "cannot be a type")); } TEST_F(ValidateIdWithMessage, OpVariableInitializerIsFunctionVarBad) { @@ -1826,8 +2019,8 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpVariable Initializer '8' is not a constant or " - "module-scope variable")); + HasSubstr("OpVariable Initializer '8[%8]' is not a constant " + "or module-scope variable")); } TEST_F(ValidateIdWithMessage, OpVariableInitializerIsModuleVarGood) { @@ -1848,6 +2041,209 @@ OpFunctionEnd EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } +TEST_F(ValidateIdWithMessage, OpVariableContainsBoolBad) { + std::string spirv = kGLSL450MemoryModel + R"( +%bool = OpTypeBool +%int = OpTypeInt 32 0 +%block = OpTypeStruct %bool %int +%_ptr_Uniform_block = OpTypePointer Uniform %block +%var = OpVariable %_ptr_Uniform_block Uniform +%void = OpTypeVoid +%fnty = OpTypeFunction %void +%main = OpFunction %void None %fnty +%entry = OpLabel +%load = OpLoad %block %var +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("If OpTypeBool is stored in conjunction with OpVariable" + ", it can only be used with non-externally visible " + "shader Storage Classes: Workgroup, CrossWorkgroup, " + "Private, and Function")); +} + +TEST_F(ValidateIdWithMessage, OpVariableContainsBoolPointerGood) { + std::string spirv = kGLSL450MemoryModel + R"( +%bool = OpTypeBool +%boolptr = OpTypePointer Uniform %bool +%int = OpTypeInt 32 0 +%block = OpTypeStruct %boolptr %int +%_ptr_Uniform_block = OpTypePointer Uniform %block +%var = OpVariable %_ptr_Uniform_block Uniform +%void = OpTypeVoid +%fnty = OpTypeFunction %void +%main = OpFunction %void None %fnty +%entry = OpLabel +%load = OpLoad %block %var +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, OpVariableContainsBuiltinBoolGood) { + std::string spirv = kGLSL450MemoryModel + R"( +OpMemberDecorate %input 0 BuiltIn FrontFacing +%bool = OpTypeBool +%input = OpTypeStruct %bool +%_ptr_input = OpTypePointer Input %input +%var = OpVariable %_ptr_input Input +%void = OpTypeVoid +%fnty = OpTypeFunction %void +%main = OpFunction %void None %fnty +%entry = OpLabel +%load = OpLoad %input %var +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, OpVariableContainsRayPayloadBoolGood) { + std::string spirv = R"( +OpCapability RayTracingNV +OpCapability Shader +OpCapability Linkage +OpExtension "SPV_NV_ray_tracing" +OpMemoryModel Logical GLSL450 +%bool = OpTypeBool +%PerRayData = OpTypeStruct %bool +%_ptr_PerRayData = OpTypePointer RayPayloadNV %PerRayData +%var = OpVariable %_ptr_PerRayData RayPayloadNV +%void = OpTypeVoid +%fnty = OpTypeFunction %void +%main = OpFunction %void None %fnty +%entry = OpLabel +%load = OpLoad %PerRayData %var +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, OpVariablePointerNoVariablePointersBad) { + const std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%_ptr_workgroup_int = OpTypePointer Workgroup %int +%_ptr_function_ptr = OpTypePointer Function %_ptr_workgroup_int +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%var = OpVariable %_ptr_function_ptr Function +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "In Logical addressing, variables may not allocate a pointer type")); +} + +TEST_F(ValidateIdWithMessage, + OpVariablePointerNoVariablePointersRelaxedLogicalGood) { + const std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%_ptr_workgroup_int = OpTypePointer Workgroup %int +%_ptr_function_ptr = OpTypePointer Function %_ptr_workgroup_int +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%var = OpVariable %_ptr_function_ptr Function +OpReturn +OpFunctionEnd +)"; + + auto options = getValidatorOptions(); + options->relax_logical_pointer = true; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, + OpVariablePointerVariablePointersStorageBufferGood) { + const std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VariablePointersStorageBuffer +OpExtension "SPV_KHR_variable_pointers" +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%_ptr_workgroup_int = OpTypePointer Workgroup %int +%_ptr_function_ptr = OpTypePointer Function %_ptr_workgroup_int +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%var = OpVariable %_ptr_function_ptr Function +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, OpVariablePointerVariablePointersGood) { + const std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VariablePointers +OpExtension "SPV_KHR_variable_pointers" +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%_ptr_workgroup_int = OpTypePointer Workgroup %int +%_ptr_function_ptr = OpTypePointer Function %_ptr_workgroup_int +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%var = OpVariable %_ptr_function_ptr Function +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateIdWithMessage, OpVariablePointerVariablePointersBad) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VariablePointers +OpExtension "SPV_KHR_variable_pointers" +OpMemoryModel Logical GLSL450 +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%_ptr_workgroup_int = OpTypePointer Workgroup %int +%_ptr_uniform_ptr = OpTypePointer Uniform %_ptr_workgroup_int +%var = OpVariable %_ptr_uniform_ptr Uniform +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("In Logical addressing with variable pointers, " + "variables that allocate pointers must be in Function " + "or Private storage classes")); +} + TEST_F(ValidateIdWithMessage, OpLoadGood) { std::string spirv = kGLSL450MemoryModel + R"( %1 = OpTypeVoid @@ -1979,9 +2375,9 @@ TEST_F(ValidateIdWithMessage, OpLoadVarPtrOpPhiGood) { EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } -// Without the VariablePointers Capability, OpLoad will not allow loading -// through a variable pointer. -TEST_F(ValidateIdWithMessage, OpLoadVarPtrOpPhiBad) { +// Without the VariablePointers Capability, OpPhi can have a pointer result +// type. +TEST_F(ValidateIdWithMessage, OpPhiBad) { std::string result_strategy = R"( %is_neg = OpSLessThan %bool %i %zero OpSelectionMerge %end_label None @@ -2000,8 +2396,10 @@ TEST_F(ValidateIdWithMessage, OpLoadVarPtrOpPhiBad) { false /* Add VariablePointers Capability?*/, false /* Use Helper Function? */); CompileSuccessfully(spirv.str()); - EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("is not a logical pointer")); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Using pointers with OpPhi requires capability " + "VariablePointers or VariablePointersStorageBuffer")); } // With the VariablePointer Capability, OpLoad should allow loading through a @@ -2038,8 +2436,9 @@ TEST_F(ValidateIdWithMessage, OpLoadResultTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpLoad Result Type '3' does not match Pointer " - " '5's type.")); + HasSubstr("OpLoad Result Type " + "'3[%_ptr_UniformConstant_uint]' does not match " + "Pointer '5[%5]'s type.")); } TEST_F(ValidateIdWithMessage, OpLoadPointerBad) { @@ -2058,7 +2457,8 @@ TEST_F(ValidateIdWithMessage, OpLoadPointerBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); // Prove that SSA checks trigger for a bad Id value. // The next test case show the not-a-logical-pointer case. - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 8 has not been defined")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 8[%8] has not been " + "defined")); } // Disabled as bitcasting type to object is now not valid. @@ -2094,7 +2494,7 @@ TEST_F(ValidateIdWithMessage, OpStoreGood) { %3 = OpTypePointer Uniform %2 %4 = OpTypeFunction %1 %5 = OpConstant %2 42 -%6 = OpVariable %3 UniformConstant +%6 = OpVariable %3 Uniform %7 = OpFunction %1 None %4 %8 = OpLabel OpStore %6 %5 @@ -2111,15 +2511,17 @@ TEST_F(ValidateIdWithMessage, OpStorePointerBad) { %4 = OpTypeFunction %1 %5 = OpConstant %2 42 %6 = OpVariable %3 UniformConstant -%7 = OpFunction %1 None %4 -%8 = OpLabel - OpStore %3 %5 +%7 = OpConstant %2 0 +%8 = OpFunction %1 None %4 +%9 = OpLabel + OpStore %7 %5 OpReturn OpFunctionEnd)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpStore Pointer '3' is not a logical pointer.")); + HasSubstr("OpStore Pointer '7[%uint_0]' is not a logical " + "pointer.")); } // Disabled as bitcasting type to object is now not valid. @@ -2189,7 +2591,7 @@ TEST_F(ValidateIdWithMessage, OpStoreObjectGood) { %3 = OpTypePointer Uniform %2 %4 = OpTypeFunction %1 %5 = OpConstant %2 42 -%6 = OpVariable %3 UniformConstant +%6 = OpVariable %3 Uniform %7 = OpFunction %1 None %4 %8 = OpLabel %9 = OpUndef %1 @@ -2199,7 +2601,7 @@ TEST_F(ValidateIdWithMessage, OpStoreObjectGood) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpStore Object '9's type is void.")); + HasSubstr("OpStore Object '9[%9]'s type is void.")); } TEST_F(ValidateIdWithMessage, OpStoreTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -2209,7 +2611,7 @@ TEST_F(ValidateIdWithMessage, OpStoreTypeBad) { %3 = OpTypePointer Uniform %2 %4 = OpTypeFunction %1 %5 = OpConstant %9 3.14 -%6 = OpVariable %3 UniformConstant +%6 = OpVariable %3 Uniform %7 = OpFunction %1 None %4 %8 = OpLabel OpStore %6 %5 @@ -2218,8 +2620,8 @@ TEST_F(ValidateIdWithMessage, OpStoreTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpStore Pointer '7's type does not match Object " - " '6's type.")); + HasSubstr("OpStore Pointer '7[%7]'s type does not match " + "Object '6[%float_3_1400001]'s type.")); } // The next series of test check test a relaxation of the rules for stores to @@ -2251,8 +2653,8 @@ TEST_F(ValidateIdWithMessage, OpStoreTypeBadStruct) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpStore Pointer '8's type does not match Object " - " '11's type.")); + HasSubstr("OpStore Pointer '8[%8]'s type does not match " + "Object '11[%11]'s type.")); } // Same code as the last test. The difference is that we relax the rule. @@ -2382,8 +2784,8 @@ TEST_F(ValidateIdWithMessage, OpStoreTypeBadRelaxedStruct1) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpStore Pointer '13's layout does not match Object " - " '16's layout.")); + HasSubstr("OpStore Pointer '13[%13]'s layout does not match Object " + " '16[%16]'s layout.")); } // This test check that the even with the relaxed rules an error is identified @@ -2422,8 +2824,8 @@ TEST_F(ValidateIdWithMessage, OpStoreTypeBadRelaxedStruct2) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpStore Pointer '13's layout does not match Object " - " '16's layout.")); + HasSubstr("OpStore Pointer '13[%13]'s layout does not match Object " + " '16[%16]'s layout.")); } TEST_F(ValidateIdWithMessage, OpStoreTypeRelaxedLogicalPointerReturnPointer) { @@ -2474,7 +2876,7 @@ TEST_F(ValidateIdWithMessage, OpStoreVoid) { %2 = OpTypeInt 32 0 %3 = OpTypePointer Uniform %2 %4 = OpTypeFunction %1 -%6 = OpVariable %3 UniformConstant +%6 = OpVariable %3 Uniform %7 = OpFunction %1 None %4 %8 = OpLabel %9 = OpFunctionCall %1 %7 @@ -2484,7 +2886,7 @@ TEST_F(ValidateIdWithMessage, OpStoreVoid) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpStore Object '8's type is void.")); + HasSubstr("OpStore Object '8[%8]'s type is void.")); } TEST_F(ValidateIdWithMessage, OpStoreLabel) { @@ -2493,7 +2895,7 @@ TEST_F(ValidateIdWithMessage, OpStoreLabel) { %2 = OpTypeInt 32 0 %3 = OpTypePointer Uniform %2 %4 = OpTypeFunction %1 -%6 = OpVariable %3 UniformConstant +%6 = OpVariable %3 Uniform %7 = OpFunction %1 None %4 %8 = OpLabel OpStore %6 %8 @@ -2502,7 +2904,7 @@ TEST_F(ValidateIdWithMessage, OpStoreLabel) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpStore Object '7' is not an object.")); + HasSubstr("Operand 7[%7] requires a type")); } // TODO: enable when this bug is fixed: @@ -2599,7 +3001,7 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Target operand '6' is not a pointer.")); + HasSubstr("Target operand '6[%6]' is not a pointer.")); } TEST_F(ValidateIdWithMessage, OpCopyMemoryNonPointerSource) { @@ -2620,7 +3022,7 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Source operand '6' is not a pointer.")); + HasSubstr("Source operand '6[%6]' is not a pointer.")); } TEST_F(ValidateIdWithMessage, OpCopyMemoryBad) { @@ -2643,8 +3045,8 @@ TEST_F(ValidateIdWithMessage, OpCopyMemoryBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Target '5's type does not match " - "Source '2's type.")); + HasSubstr("Target '5[%5]'s type does not match " + "Source '2[%uint]'s type.")); } TEST_F(ValidateIdWithMessage, OpCopyMemoryVoidTarget) { @@ -2666,7 +3068,8 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Target operand '7' cannot be a void pointer.")); + HasSubstr("Target operand '7[%7]' cannot be a void " + "pointer.")); } TEST_F(ValidateIdWithMessage, OpCopyMemoryVoidSource) { @@ -2688,7 +3091,8 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Source operand '7' cannot be a void pointer.")); + HasSubstr("Source operand '7[%7]' cannot be a void " + "pointer.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedGood) { @@ -2720,13 +3124,13 @@ TEST_F(ValidateIdWithMessage, OpCopyMemorySizedTargetBad) { %7 = OpTypeFunction %1 %8 = OpFunction %1 None %7 %9 = OpLabel - OpCopyMemorySized %9 %6 %5 None + OpCopyMemorySized %5 %5 %5 None OpReturn OpFunctionEnd)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Target operand '9' is not a pointer.")); + HasSubstr("Target operand '5[%uint_4]' is not a pointer.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSourceBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -2745,7 +3149,7 @@ TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSourceBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Source operand '5' is not a pointer.")); + HasSubstr("Source operand '5[%uint_4]' is not a pointer.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -2766,7 +3170,7 @@ TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Size operand '6' must be a scalar integer type.")); + HasSubstr("Size operand '6[%6]' must be a scalar integer type.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -2789,7 +3193,8 @@ TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Size operand '9' must be a scalar integer type.")); + HasSubstr("Size operand '9[%float_1]' must be a scalar integer " + "type.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeConstantNull) { @@ -2813,7 +3218,8 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Size operand '3' cannot be a constant zero.")); + HasSubstr("Size operand '3[%3]' cannot be a constant " + "zero.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeConstantZero) { @@ -2837,7 +3243,8 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Size operand '3' cannot be a constant zero.")); + HasSubstr("Size operand '3[%uint_0]' cannot be a constant " + "zero.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeConstantZero64) { @@ -2861,7 +3268,8 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Size operand '3' cannot be a constant zero.")); + HasSubstr("Size operand '3[%ulong_0]' cannot be a constant " + "zero.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeConstantNegative) { @@ -2886,7 +3294,8 @@ OpFunctionEnd EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Size operand '3' cannot have the sign bit set to 1.")); + HasSubstr("Size operand '3[%int_n1]' cannot have the sign bit set " + "to 1.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeConstantNegative64) { @@ -2911,7 +3320,8 @@ OpFunctionEnd EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("Size operand '3' cannot have the sign bit set to 1.")); + HasSubstr("Size operand '3[%long_n1]' cannot have the sign bit set " + "to 1.")); } TEST_F(ValidateIdWithMessage, OpCopyMemorySizedSizeUnsignedNegative) { @@ -2991,15 +3401,14 @@ const char kDeeplyNestedStructureSetup[] = R"( ; } %f32arr = OpTypeRuntimeArray %float -%bool = OpTypeBool %v4float = OpTypeVector %float 4 %array5_mat4x3 = OpTypeArray %mat4x3 %int_5 %array5_vec4 = OpTypeArray %v4float %int_5 %_ptr_Uniform_float = OpTypePointer Uniform %float %_ptr_Function_vec4 = OpTypePointer Function %v4float %_ptr_Uniform_vec4 = OpTypePointer Uniform %v4float -%struct_s = OpTypeStruct %bool %array5_vec4 %int %array5_mat4x3 -%struct_blockName = OpTypeStruct %struct_s %bool %f32arr +%struct_s = OpTypeStruct %int %array5_vec4 %int %array5_mat4x3 +%struct_blockName = OpTypeStruct %struct_s %int %f32arr %_ptr_Uniform_blockName = OpTypePointer Uniform %struct_blockName %_ptr_Uniform_struct_s = OpTypePointer Uniform %struct_s %_ptr_Uniform_array5_mat4x3 = OpTypePointer Uniform %array5_mat4x3 @@ -3007,6 +3416,7 @@ const char kDeeplyNestedStructureSetup[] = R"( %_ptr_Uniform_v3float = OpTypePointer Uniform %v3float %blockName_var = OpVariable %_ptr_Uniform_blockName Uniform %spec_int = OpSpecConstant %int 2 +%float_0 = OpConstant %float 0 %func = OpFunction %void None %void_f %my_label = OpLabel )"; @@ -3051,7 +3461,7 @@ OpFunctionEnd )"; const std::string expected_err = "The Result Type of " + instr + - " '36' must be " + " '36[%36]' must be " "OpTypePointer. Found OpTypeFloat."; CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); @@ -3069,12 +3479,10 @@ TEST_P(AccessChainInstructionTest, AccessChainBaseTypeVoidBad) { OpReturn OpFunctionEnd )"; - const std::string expected_err = "The Base '1' in " + instr + - " instruction must " - "be a pointer."; CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr(expected_err)); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 1[%void] cannot be a " + "type")); } // Invalid. The base type of an access chain instruction must be a pointer. @@ -3089,12 +3497,10 @@ TEST_P(AccessChainInstructionTest, AccessChainBaseTypeNonPtrVariableBad) { OpReturn OpFunctionEnd )"; - const std::string expected_err = "The Base '8' in " + instr + - " instruction must " - "be a pointer."; CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr(expected_err)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 8[%_ptr_Private_float] cannot be a type")); } // Invalid: The storage class of Base and Result do not match. @@ -3313,7 +3719,7 @@ TEST_P(AccessChainInstructionTest, AccessChainUndefinedIndexBad) { std::string spirv = kGLSL450MemoryModel + kDeeplyNestedStructureSetup + R"( %entry = )" + instr + R"( %_ptr_Private_float %my_matrix )" + elem + - R"(%float %int_1 + R"(%float_0 %int_1 OpReturn OpFunctionEnd )"; @@ -3397,8 +3803,8 @@ OpFunctionEnd )"; const std::string expected_err = "Index is out of bounds: " + instr + " can not find index 3 into the structure " - " '26'. This structure has 3 members. " - "Largest valid index is 2."; + " '25[%_struct_25]'. This structure " + "has 3 members. Largest valid index is 2."; CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr(expected_err)); @@ -3544,8 +3950,9 @@ TEST_F(ValidateIdWithMessage, OpFunctionResultTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpFunction Result Type '2' does not match the " - "Function Type's return type '1'.")); + HasSubstr("OpFunction Result Type '2[%uint]' does not " + "match the Function Type's return type " + "'1[%void]'.")); } TEST_F(ValidateIdWithMessage, OpReturnValueTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -3560,8 +3967,8 @@ TEST_F(ValidateIdWithMessage, OpReturnValueTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpReturnValue Value '3's type does not match " - "OpFunction's return type.")); + HasSubstr("OpReturnValue Value '3[%float_0]'s type does " + "not match OpFunction's return type.")); } TEST_F(ValidateIdWithMessage, OpFunctionFunctionTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -3575,7 +3982,8 @@ OpFunctionEnd)"; EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpFunction Function Type '2' is not a function type.")); + HasSubstr("OpFunction Function Type '2[%uint]' is not a function " + "type.")); } TEST_F(ValidateIdWithMessage, OpFunctionUseBad) { @@ -3591,7 +3999,7 @@ OpFunctionEnd CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Invalid use of function result id 3.")); + HasSubstr("Invalid use of function result id 3[%3].")); } TEST_F(ValidateIdWithMessage, OpFunctionParameterGood) { @@ -3635,8 +4043,8 @@ TEST_F(ValidateIdWithMessage, OpFunctionParameterResultTypeBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpFunctionParameter Result Type '1' does not match the " - "OpTypeFunction parameter type of the same index.")); + HasSubstr("OpFunctionParameter Result Type '1[%void]' does not " + "match the OpTypeFunction parameter type of the same index.")); } TEST_F(ValidateIdWithMessage, OpFunctionCallGood) { @@ -3684,8 +4092,9 @@ TEST_F(ValidateIdWithMessage, OpFunctionCallResultTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpFunctionCall Result Type '1's type does not " - "match Function '2's return type.")); + HasSubstr("OpFunctionCall Result Type '1[%void]'s type " + "does not match Function '2[%uint]'s return " + "type.")); } TEST_F(ValidateIdWithMessage, OpFunctionCallFunctionBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -3703,7 +4112,8 @@ TEST_F(ValidateIdWithMessage, OpFunctionCallFunctionBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpFunctionCall Function '5' is not a function.")); + HasSubstr("OpFunctionCall Function '5[%uint_42]' is not a " + "function.")); } TEST_F(ValidateIdWithMessage, OpFunctionCallArgumentTypeBad) { std::string spirv = kGLSL450MemoryModel + R"( @@ -3731,8 +4141,9 @@ TEST_F(ValidateIdWithMessage, OpFunctionCallArgumentTypeBad) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpFunctionCall Argument '7's type does not match " - "Function '2's parameter type.")); + HasSubstr("OpFunctionCall Argument '7[%float_3_1400001]'s " + "type does not match Function '2[%uint]'s " + "parameter type.")); } // Valid: OpSampledImage result is used in the same block by @@ -3763,8 +4174,8 @@ OpFunctionEnd)"; getDiagnosticString(), HasSubstr("All OpSampledImage instructions must be in the same block in " "which their Result are consumed. OpSampledImage Result " - "Type '23' has a consumer in a different basic block. The " - "consumer instruction is '25'.")); + "Type '23[%23]' has a consumer in a different basic " + "block. The consumer instruction is '25[%25]'.")); } // Invalid: OpSampledImage result is used by OpSelect @@ -3968,7 +4379,7 @@ TEST_F(ValidateIdWithMessage, OpVectorShuffleComponentCount) { EXPECT_THAT( getDiagnosticString(), HasSubstr("OpVectorShuffle component literals count does not match " - "Result Type '2's vector component count.")); + "Result Type '2[%v3uint]'s vector component count.")); } TEST_F(ValidateIdWithMessage, OpVectorShuffleVector1Type) { @@ -4111,6 +4522,39 @@ TEST_F(ValidateIdWithMessage, OpVectorShuffleLiterals) { "size of 5.")); } +TEST_F(ValidateIdWithMessage, WebGPUOpVectorShuffle0xFFFFFFFFLiteralBad) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR +%float = OpTypeFloat 32 +%vec2 = OpTypeVector %float 2 +%vec3 = OpTypeVector %float 3 +%vec4 = OpTypeVector %float 4 +%ptr_vec2 = OpTypePointer Function %vec2 +%ptr_vec3 = OpTypePointer Function %vec3 +%float_1 = OpConstant %float 1 +%float_2 = OpConstant %float 2 +%1 = OpConstantComposite %vec2 %float_2 %float_1 +%2 = OpConstantComposite %vec3 %float_1 %float_2 %float_2 +%3 = OpTypeFunction %vec4 +%4 = OpFunction %vec4 None %3 +%5 = OpLabel +%var = OpVariable %ptr_vec2 Function %1 +%var2 = OpVariable %ptr_vec3 Function %2 +%6 = OpLoad %vec2 %var +%7 = OpLoad %vec3 %var2 +%8 = OpVectorShuffle %vec4 %6 %7 4 3 1 0xffffffff + OpReturnValue %8 + OpFunctionEnd)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Component literal at operand 3 cannot be 0xFFFFFFFF in" + " WebGPU execution environment.")); +} + // TODO: OpCompositeConstruct // TODO: OpCompositeExtract // TODO: OpCompositeInsert @@ -4212,7 +4656,8 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 3 is not a type id")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 3[%true] is not a type " + "id")); } TEST_F(ValidateIdWithMessage, OpPhiSamePredecessor) { @@ -4324,8 +4769,9 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpPhi's result type 2 does not match incoming " - "value 6 type 5.")); + HasSubstr("OpPhi's result type 2[%bool] does not match " + "incoming value 6[%uint_0] type " + "5[%uint].")); } TEST_F(ValidateIdWithMessage, OpPhiPredecessorNotABlock) { @@ -4349,9 +4795,9 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpPhi's incoming basic block 3 is not an OpLabel.")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("OpPhi's incoming basic block 3[%true] is not an " + "OpLabel.")); } TEST_F(ValidateIdWithMessage, OpPhiNotAPredecessor) { @@ -4376,8 +4822,8 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpPhi's incoming basic block 9 is not a " - "predecessor of 8.")); + HasSubstr("OpPhi's incoming basic block 9[%9] is not a " + "predecessor of 8[%8].")); } TEST_F(ValidateIdWithMessage, OpBranchConditionalGood) { @@ -4470,6 +4916,17 @@ TEST_F(ValidateIdWithMessage, OpBranchConditional_TooManyWeights) { HasSubstr("OpBranchConditional requires either 3 or 5 parameters")); } +TEST_F(ValidateIdWithMessage, OpBranchConditional_ConditionIsAType) { + std::string spirv = BranchConditionalSetup + R"( +OpBranchConditional %bool %target_t %target_f +)" + BranchConditionalTail; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 3[%bool] cannot be a " + "type")); +} + // TODO: OpSwitch TEST_F(ValidateIdWithMessage, OpReturnValueConstantGood) { @@ -4529,9 +4986,8 @@ TEST_F(ValidateIdWithMessage, OpReturnValueIsType) { OpFunctionEnd)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpReturnValue Value '1' does not represent a value.")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 1[%void] cannot be a " + "type")); } TEST_F(ValidateIdWithMessage, OpReturnValueIsLabel) { @@ -4545,9 +5001,8 @@ TEST_F(ValidateIdWithMessage, OpReturnValueIsLabel) { OpFunctionEnd)"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("OpReturnValue Value '5' does not represent a value.")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 5[%5] requires a type")); } TEST_F(ValidateIdWithMessage, OpReturnValueIsVoid) { @@ -4564,7 +5019,8 @@ TEST_F(ValidateIdWithMessage, OpReturnValueIsVoid) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpReturnValue value's type '1' is missing or void.")); + HasSubstr("OpReturnValue value's type '1[%void]' is missing or " + "void.")); } TEST_F(ValidateIdWithMessage, OpReturnValueIsVariableInPhysical) { @@ -4573,7 +5029,7 @@ TEST_F(ValidateIdWithMessage, OpReturnValueIsVariableInPhysical) { OpMemoryModel Physical32 OpenCL %1 = OpTypeVoid %2 = OpTypeInt 32 0 -%3 = OpTypePointer Private %2 +%3 = OpTypePointer Function %2 %4 = OpTypeFunction %3 %5 = OpFunction %3 None %4 %6 = OpLabel @@ -4590,7 +5046,7 @@ TEST_F(ValidateIdWithMessage, OpReturnValueIsVariableInLogical) { OpMemoryModel Logical GLSL450 %1 = OpTypeVoid %2 = OpTypeInt 32 0 -%3 = OpTypePointer Private %2 +%3 = OpTypePointer Function %2 %4 = OpTypeFunction %3 %5 = OpFunction %3 None %4 %6 = OpLabel @@ -4600,8 +5056,9 @@ TEST_F(ValidateIdWithMessage, OpReturnValueIsVariableInLogical) { CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpReturnValue value's type '3' is a pointer, " - "which is invalid in the Logical addressing model.")); + HasSubstr("OpReturnValue value's type " + "'3[%_ptr_Function_uint]' is a pointer, which is " + "invalid in the Logical addressing model.")); } // With the VariablePointer Capability, the return value of a function is @@ -4673,7 +5130,8 @@ TEST_F(ValidateIdWithMessage, UndefinedIdScope) { )"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 7 has not been defined")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 7[%7] has not been " + "defined")); } TEST_F(ValidateIdWithMessage, UndefinedIdMemSem) { @@ -4690,7 +5148,8 @@ TEST_F(ValidateIdWithMessage, UndefinedIdMemSem) { )"; CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 7 has not been defined")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 7[%7] has not been " + "defined")); } TEST_F(ValidateIdWithMessage, @@ -4761,6 +5220,33 @@ TEST_F(ValidateIdWithMessage, OpPtrAccessChainGood) { EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); } +TEST_F(ValidateIdWithMessage, StgBufOpPtrAccessChainGood) { + std::string spirv = R"( + OpCapability Shader + OpCapability Linkage + OpCapability VariablePointersStorageBuffer + OpExtension "SPV_KHR_variable_pointers" + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %3 "" +%int = OpTypeInt 32 0 +%int_2 = OpConstant %int 2 +%int_4 = OpConstant %int 4 +%struct = OpTypeStruct %int +%array = OpTypeArray %struct %int_4 +%ptr = OpTypePointer StorageBuffer %array +%var = OpVariable %ptr StorageBuffer +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel +%5 = OpPtrAccessChain %ptr %var %int_2 + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + TEST_F(ValidateIdWithMessage, OpLoadBitcastPointerGood) { std::string spirv = kOpenCLMemoryModel64 + R"( %2 = OpTypeVoid @@ -4798,7 +5284,8 @@ TEST_F(ValidateIdWithMessage, OpLoadBitcastNonPointerBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpLoad type for pointer '11' is not a pointer type.")); + HasSubstr("OpLoad type for pointer '11[%11]' is not a pointer " + "type.")); } TEST_F(ValidateIdWithMessage, OpStoreBitcastPointerGood) { std::string spirv = kOpenCLMemoryModel64 + R"( @@ -4838,7 +5325,8 @@ TEST_F(ValidateIdWithMessage, OpStoreBitcastNonPointerBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - HasSubstr("OpStore type for pointer '11' is not a pointer type.")); + HasSubstr("OpStore type for pointer '11[%11]' is not a pointer " + "type.")); } // Result resulting from an instruction within a function may not be used @@ -4865,7 +5353,8 @@ OpFunctionEnd EXPECT_THAT( getDiagnosticString(), HasSubstr( - "ID 7 defined in block 6 does not dominate its use in block 9")); + "ID 7[%7] defined in block 6[%6] does not dominate its use in block " + "9[%9]")); } TEST_F(ValidateIdWithMessage, SpecIdTargetNotSpecializationConstant) { @@ -4883,8 +5372,9 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpDecorate SpecId decoration target '1' is not a " - "scalar specialization constant.")); + HasSubstr("OpDecorate SpecId decoration target " + "'1[%uint_3]' is not a scalar specialization " + "constant.")); } TEST_F(ValidateIdWithMessage, SpecIdTargetOpSpecConstantOpBad) { @@ -4904,8 +5394,8 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpDecorate SpecId decoration target '1' is not a " - "scalar specialization constant.")); + HasSubstr("OpDecorate SpecId decoration target '1[%1]' is " + "not a scalar specialization constant.")); } TEST_F(ValidateIdWithMessage, SpecIdTargetOpSpecConstantCompositeBad) { @@ -4924,8 +5414,8 @@ OpFunctionEnd CompileSuccessfully(spirv.c_str()); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("OpDecorate SpecId decoration target '1' is not a " - "scalar specialization constant.")); + HasSubstr("OpDecorate SpecId decoration target '1[%1]' is " + "not a scalar specialization constant.")); } TEST_F(ValidateIdWithMessage, SpecIdTargetGood) { @@ -4973,7 +5463,7 @@ TEST_F(ValidateIdWithMessage, CorrectErrorForShuffle) { HasSubstr( "Component index 4 is out of bounds for combined (Vector1 + Vector2) " "size of 4.")); - EXPECT_EQ(23, getErrorPosition().index); + EXPECT_EQ(25, getErrorPosition().index); } TEST_F(ValidateIdWithMessage, VoidStructMember) { @@ -5001,7 +5491,7 @@ TEST_F(ValidateIdWithMessage, TypeFunctionBadUse) { CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - HasSubstr("Invalid use of function type result id 2.")); + HasSubstr("Invalid use of function type result id 2[%2].")); } TEST_F(ValidateIdWithMessage, BadTypeId) { @@ -5019,73 +5509,893 @@ TEST_F(ValidateIdWithMessage, BadTypeId) { CompileSuccessfully(spirv); EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 4 is not a type id")); + EXPECT_THAT(getDiagnosticString(), HasSubstr("ID 4[%float_0] is not a type " + "id")); } -// TODO: OpLifetimeStart -// TODO: OpLifetimeStop -// TODO: OpAtomicInit -// TODO: OpAtomicLoad -// TODO: OpAtomicStore -// TODO: OpAtomicExchange -// TODO: OpAtomicCompareExchange -// TODO: OpAtomicCompareExchangeWeak -// TODO: OpAtomicIIncrement -// TODO: OpAtomicIDecrement -// TODO: OpAtomicIAdd -// TODO: OpAtomicISub -// TODO: OpAtomicUMin -// TODO: OpAtomicUMax -// TODO: OpAtomicAnd -// TODO: OpAtomicOr -// TODO: OpAtomicXor -// TODO: OpAtomicIMin -// TODO: OpAtomicIMax -// TODO: OpEmitStreamVertex -// TODO: OpEndStreamPrimitive -// TODO: OpAsyncGroupCopy -// TODO: OpWaitGroupEvents -// TODO: OpGroupAll -// TODO: OpGroupAny -// TODO: OpGroupBroadcast -// TODO: OpGroupIAdd -// TODO: OpGroupFAdd -// TODO: OpGroupFMin -// TODO: OpGroupUMin -// TODO: OpGroupSMin -// TODO: OpGroupFMax -// TODO: OpGroupUMax -// TODO: OpGroupSMax -// TODO: OpEnqueueMarker -// TODO: OpEnqueueKernel -// TODO: OpGetKernelNDrangeSubGroupCount -// TODO: OpGetKernelNDrangeMaxSubGroupSize -// TODO: OpGetKernelWorkGroupSize -// TODO: OpGetKernelPreferredWorkGroupSizeMultiple -// TODO: OpRetainEvent -// TODO: OpReleaseEvent -// TODO: OpCreateUserEvent -// TODO: OpIsValidEvent -// TODO: OpSetUserEventStatus -// TODO: OpCaptureEventProfilingInfo -// TODO: OpGetDefaultQueue -// TODO: OpBuildNDRange -// TODO: OpReadPipe -// TODO: OpWritePipe -// TODO: OpReservedReadPipe -// TODO: OpReservedWritePipe -// TODO: OpReserveReadPipePackets -// TODO: OpReserveWritePipePackets -// TODO: OpCommitReadPipe -// TODO: OpCommitWritePipe -// TODO: OpIsValidReserveId -// TODO: OpGetNumPipePackets -// TODO: OpGetMaxPipePackets -// TODO: OpGroupReserveReadPipePackets -// TODO: OpGroupReserveWritePipePackets -// TODO: OpGroupCommitReadPipe -// TODO: OpGroupCommitWritePipe +TEST_F(ValidateIdWithMessage, VulkanMemoryModelLoadMakePointerVisibleGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypeFunction %1 +%6 = OpConstant %2 2 +%7 = OpFunction %1 None %5 +%8 = OpLabel +%9 = OpLoad %2 %4 NonPrivatePointerKHR|MakePointerVisibleKHR %6 +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelLoadMakePointerVisibleMissingNonPrivatePointer) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypeFunction %1 +%6 = OpConstant %2 2 +%7 = OpFunction %1 None %5 +%8 = OpLabel +%9 = OpLoad %2 %4 MakePointerVisibleKHR %6 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR must be specified if " + "MakePointerVisibleKHR is specified.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelLoadNonPrivatePointerBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Private %2 +%4 = OpVariable %3 Private +%5 = OpTypeFunction %1 +%6 = OpConstant %2 2 +%7 = OpFunction %1 None %5 +%8 = OpLabel +%9 = OpLoad %2 %4 NonPrivatePointerKHR +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or " + "StorageBuffer storage classes.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelLoadMakePointerAvailableCannotBeUsed) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypeFunction %1 +%6 = OpConstant %2 2 +%7 = OpFunction %1 None %5 +%8 = OpLabel +%9 = OpLoad %2 %4 NonPrivatePointerKHR|MakePointerAvailableKHR %6 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("MakePointerAvailableKHR cannot be used with OpLoad")); +} + +TEST_F(ValidateIdWithMessage, VulkanMemoryModelStoreMakePointerAvailableGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Uniform %2 +%4 = OpVariable %3 Uniform +%5 = OpTypeFunction %1 +%6 = OpConstant %2 5 +%7 = OpFunction %1 None %5 +%8 = OpLabel +OpStore %4 %6 NonPrivatePointerKHR|MakePointerAvailableKHR %6 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelStoreMakePointerAvailableMissingNonPrivatePointer) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Uniform %2 +%4 = OpVariable %3 Uniform +%5 = OpTypeFunction %1 +%6 = OpConstant %2 5 +%7 = OpFunction %1 None %5 +%8 = OpLabel +OpStore %4 %6 MakePointerAvailableKHR %6 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR must be specified if " + "MakePointerAvailableKHR is specified.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelStoreNonPrivatePointerBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Output %2 +%4 = OpVariable %3 Output +%5 = OpTypeFunction %1 +%6 = OpConstant %2 5 +%7 = OpFunction %1 None %5 +%8 = OpLabel +OpStore %4 %6 NonPrivatePointerKHR +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or " + "StorageBuffer storage classes.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelStoreMakePointerVisibleCannotBeUsed) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Uniform %2 +%4 = OpVariable %3 Uniform +%5 = OpTypeFunction %1 +%6 = OpConstant %2 5 +%7 = OpFunction %1 None %5 +%8 = OpLabel +OpStore %4 %6 NonPrivatePointerKHR|MakePointerVisibleKHR %6 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("MakePointerVisibleKHR cannot be used with OpStore.")); +} + +TEST_F(ValidateIdWithMessage, VulkanMemoryModelCopyMemoryAvailable) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 NonPrivatePointerKHR|MakePointerAvailableKHR %7 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, VulkanMemoryModelCopyMemoryVisible) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 NonPrivatePointerKHR|MakePointerVisibleKHR %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, VulkanMemoryModelCopyMemoryAvailableAndVisible) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 NonPrivatePointerKHR|MakePointerAvailableKHR|MakePointerVisibleKHR %7 %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemoryAvailableMissingNonPrivatePointer) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 MakePointerAvailableKHR %7 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR must be specified if " + "MakePointerAvailableKHR is specified.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemoryVisibleMissingNonPrivatePointer) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 MakePointerVisibleKHR %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR must be specified if " + "MakePointerVisibleKHR is specified.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemoryAvailableBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Output %2 +%4 = OpVariable %3 Output +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 NonPrivatePointerKHR +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or " + "StorageBuffer storage classes.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemoryVisibleBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Input %2 +%6 = OpVariable %5 Input +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemory %4 %6 NonPrivatePointerKHR +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or " + "StorageBuffer storage classes.")); +} + +TEST_F(ValidateIdWithMessage, VulkanMemoryModelCopyMemorySizedAvailable) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 NonPrivatePointerKHR|MakePointerAvailableKHR %7 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, VulkanMemoryModelCopyMemorySizedVisible) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 NonPrivatePointerKHR|MakePointerVisibleKHR %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemorySizedAvailableAndVisible) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 NonPrivatePointerKHR|MakePointerAvailableKHR|MakePointerVisibleKHR %7 %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemorySizedAvailableMissingNonPrivatePointer) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 MakePointerAvailableKHR %7 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR must be specified if " + "MakePointerAvailableKHR is specified.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemorySizedVisibleMissingNonPrivatePointer) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 MakePointerVisibleKHR %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR must be specified if " + "MakePointerVisibleKHR is specified.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemorySizedAvailableBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Output %2 +%4 = OpVariable %3 Output +%5 = OpTypePointer Uniform %2 +%6 = OpVariable %5 Uniform +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 NonPrivatePointerKHR +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or " + "StorageBuffer storage classes.")); +} + +TEST_F(ValidateIdWithMessage, + VulkanMemoryModelCopyMemorySizedVisibleBadStorageClass) { + std::string spirv = R"( +OpCapability Shader +OpCapability Linkage +OpCapability Addresses +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%1 = OpTypeVoid +%2 = OpTypeInt 32 0 +%3 = OpTypePointer Workgroup %2 +%4 = OpVariable %3 Workgroup +%5 = OpTypePointer Input %2 +%6 = OpVariable %5 Input +%7 = OpConstant %2 2 +%8 = OpConstant %2 5 +%9 = OpTypeFunction %1 +%10 = OpFunction %1 None %9 +%11 = OpLabel +OpCopyMemorySized %4 %6 %7 NonPrivatePointerKHR +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("NonPrivatePointerKHR requires a pointer in Uniform, " + "Workgroup, CrossWorkgroup, Generic, Image or " + "StorageBuffer storage classes.")); +} + +TEST_F(ValidateIdWithMessage, IdDefInUnreachableBlock1) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +%7 = OpFunctionCall %3 %8 +OpUnreachable +OpFunctionEnd +%8 = OpFunction %3 None %4 +%9 = OpLabel +OpReturnValue %7 +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 7[%7] defined in block 6[%6] does not dominate its " + "use in block 9[%9]\n %9 = OpLabel")); +} + +TEST_F(ValidateIdWithMessage, IdDefInUnreachableBlock2) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +OpReturn +%7 = OpLabel +%8 = OpFunctionCall %3 %9 +OpUnreachable +OpFunctionEnd +%9 = OpFunction %3 None %4 +%10 = OpLabel +OpReturnValue %8 +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 8[%8] defined in block 7[%7] does not dominate its " + "use in block 10[%10]\n %10 = OpLabel")); +} + +TEST_F(ValidateIdWithMessage, IdDefInUnreachableBlock3) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +OpReturn +%7 = OpLabel +%8 = OpFunctionCall %3 %9 +OpReturn +OpFunctionEnd +%9 = OpFunction %3 None %4 +%10 = OpLabel +OpReturnValue %8 +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 8[%8] defined in block 7[%7] does not dominate its " + "use in block 10[%10]\n %10 = OpLabel")); +} + +TEST_F(ValidateIdWithMessage, IdDefInUnreachableBlock4) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +OpReturn +%7 = OpLabel +%8 = OpUndef %3 +%9 = OpCopyObject %3 %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, IdDefInUnreachableBlock5) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +OpReturn +%7 = OpLabel +%8 = OpUndef %3 +OpBranch %9 +%9 = OpLabel +%10 = OpCopyObject %3 %8 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, IdDefInUnreachableBlock6) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +OpBranch %7 +%8 = OpLabel +%9 = OpUndef %3 +OpBranch %7 +%7 = OpLabel +%10 = OpCopyObject %3 %9 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("ID 9[%9] defined in block 8[%8] does not dominate its " + "use in block 7[%7]\n %7 = OpLabel")); +} + +TEST_F(ValidateIdWithMessage, ReachableDefUnreachableUse) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpTypeFloat 32 +%4 = OpTypeFunction %3 +%5 = OpFunction %1 None %2 +%6 = OpLabel +%7 = OpUndef %3 +OpReturn +%8 = OpLabel +%9 = OpCopyObject %3 %7 +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateIdWithMessage, UnreachableDefUsedInPhi) { + const std::string spirv = kNoKernelGLSL450MemoryModel + R"( + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %bool = OpTypeBool + %6 = OpTypeFunction %float + %1 = OpFunction %void None %3 + %7 = OpLabel + %8 = OpUndef %bool + OpSelectionMerge %9 None + OpBranchConditional %8 %10 %9 + %10 = OpLabel + %11 = OpUndef %float + OpBranch %9 + %12 = OpLabel + %13 = OpUndef %float + OpUnreachable + %9 = OpLabel + %14 = OpPhi %float %11 %10 %13 %7 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("In OpPhi instruction 14[%14], ID 13[%13] definition does not " + "dominate its parent 7[%7]\n %14 = OpPhi %float %11 %10 %13 " + "%7")); +} + +TEST_F(ValidateIdWithMessage, OpTypeForwardPointerNotAPointerType) { + std::string spirv = R"( + OpCapability GenericPointer + OpCapability VariablePointersStorageBuffer + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginLowerLeft + OpTypeForwardPointer %2 CrossWorkgroup +%2 = OpTypeVoid +%3 = OpTypeFunction %2 +%1 = OpFunction %2 DontInline %3 +%4 = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Pointer type in OpTypeForwardPointer is not a pointer " + "type.\n OpTypeForwardPointer %void CrossWorkgroup")); +} + +TEST_F(ValidateIdWithMessage, OpTypeForwardPointerWrongStorageClass) { + std::string spirv = R"( + OpCapability GenericPointer + OpCapability VariablePointersStorageBuffer + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginLowerLeft + OpTypeForwardPointer %2 CrossWorkgroup +%int = OpTypeInt 32 1 +%2 = OpTypePointer Function %int +%void = OpTypeVoid +%3 = OpTypeFunction %void +%1 = OpFunction %void None %3 +%4 = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Storage class in OpTypeForwardPointer does not match the " + "pointer definition.\n OpTypeForwardPointer " + "%_ptr_Function_int CrossWorkgroup")); +} } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_image_test.cpp b/3rdparty/spirv-tools/test/val/val_image_test.cpp index 03f3eeb99..79aecb25b 100644 --- a/3rdparty/spirv-tools/test/val/val_image_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_image_test.cpp @@ -34,7 +34,8 @@ std::string GenerateShaderCode( const std::string& body, const std::string& capabilities_and_extensions = "", const std::string& execution_model = "Fragment", - const spv_target_env env = SPV_ENV_UNIVERSAL_1_0) { + const spv_target_env env = SPV_ENV_UNIVERSAL_1_0, + const std::string& memory_model = "GLSL450") { std::ostringstream ss; ss << R"( OpCapability Shader @@ -46,6 +47,7 @@ OpCapability ImageQuery OpCapability Int64 OpCapability Float64 OpCapability SparseResidency +OpCapability ImageBuffer )"; if (env == SPV_ENV_UNIVERSAL_1_0) { @@ -53,8 +55,42 @@ OpCapability SparseResidency } ss << capabilities_and_extensions; - ss << "OpMemoryModel Logical GLSL450\n"; + ss << "OpMemoryModel Logical " << memory_model << "\n"; ss << "OpEntryPoint " << execution_model << " %main \"main\"\n"; + if (execution_model == "Fragment") { + ss << "OpExecutionMode %main OriginUpperLeft\n"; + } + + if (env == SPV_ENV_VULKAN_1_0) { + ss << R"( +OpDecorate %uniform_image_f32_1d_0001 DescriptorSet 0 +OpDecorate %uniform_image_f32_1d_0001 Binding 0 +OpDecorate %uniform_image_f32_1d_0002_rgba32f DescriptorSet 0 +OpDecorate %uniform_image_f32_1d_0002_rgba32f Binding 1 +OpDecorate %uniform_image_f32_2d_0001 DescriptorSet 0 +OpDecorate %uniform_image_f32_2d_0001 Binding 2 +OpDecorate %uniform_image_f32_2d_0010 DescriptorSet 0 +OpDecorate %uniform_image_f32_2d_0010 Binding 3 +OpDecorate %uniform_image_u32_2d_0001 DescriptorSet 1 +OpDecorate %uniform_image_u32_2d_0001 Binding 0 +OpDecorate %uniform_image_u32_2d_0000 DescriptorSet 1 +OpDecorate %uniform_image_u32_2d_0000 Binding 1 +OpDecorate %uniform_image_s32_3d_0001 DescriptorSet 1 +OpDecorate %uniform_image_s32_3d_0001 Binding 2 +OpDecorate %uniform_image_f32_2d_0002 DescriptorSet 1 +OpDecorate %uniform_image_f32_2d_0002 Binding 3 +OpDecorate %uniform_image_f32_spd_0002 DescriptorSet 2 +OpDecorate %uniform_image_f32_spd_0002 Binding 0 +OpDecorate %uniform_image_f32_3d_0111 DescriptorSet 2 +OpDecorate %uniform_image_f32_3d_0111 Binding 1 +OpDecorate %uniform_image_f32_cube_0101 DescriptorSet 2 +OpDecorate %uniform_image_f32_cube_0101 Binding 2 +OpDecorate %uniform_image_f32_cube_0102_rgba32f DescriptorSet 2 +OpDecorate %uniform_image_f32_cube_0102_rgba32f Binding 3 +OpDecorate %uniform_sampler DescriptorSet 3 +OpDecorate %uniform_sampler Binding 0 +)"; + } ss << R"( %void = OpTypeVoid @@ -209,6 +245,22 @@ OpCapability SparseResidency %type_sampler = OpTypeSampler %ptr_sampler = OpTypePointer UniformConstant %type_sampler %uniform_sampler = OpVariable %ptr_sampler UniformConstant + +%type_image_u32_buffer_0002_r32ui = OpTypeImage %u32 Buffer 0 0 0 2 R32ui +%ptr_Image_u32 = OpTypePointer Image %u32 +%ptr_image_u32_buffer_0002_r32ui = OpTypePointer Private %type_image_u32_buffer_0002_r32ui +%private_image_u32_buffer_0002_r32ui = OpVariable %ptr_image_u32_buffer_0002_r32ui Private + +%ptr_Image_u32arr4 = OpTypePointer Image %u32arr4 + +%type_image_u32_spd_0002 = OpTypeImage %u32 SubpassData 0 0 0 2 Unknown +%ptr_image_u32_spd_0002 = OpTypePointer Private %type_image_u32_spd_0002 +%private_image_u32_spd_0002 = OpVariable %ptr_image_u32_spd_0002 Private + +%type_image_f32_buffer_0002_r32ui = OpTypeImage %f32 Buffer 0 0 0 2 R32ui +%ptr_Image_f32 = OpTypePointer Image %f32 +%ptr_image_f32_buffer_0002_r32ui = OpTypePointer Private %type_image_f32_buffer_0002_r32ui +%private_image_f32_buffer_0002_r32ui = OpVariable %ptr_image_f32_buffer_0002_r32ui Private )"; if (env == SPV_ENV_UNIVERSAL_1_0) { @@ -357,7 +409,8 @@ OpMemoryModel Logical GLSL450 )"; if (include_entry_point) { - ss << "OpEntryPoint Fragment %main \"main\""; + ss << "OpEntryPoint Fragment %main \"main\"\n"; + ss << "OpExecutionMode %main OriginUpperLeft"; } ss << R"( %void = OpTypeVoid @@ -593,6 +646,157 @@ TEST_F(ValidateImage, SampledImageNotSampler) { HasSubstr("Expected Sampler to be of type OpTypeSampler")); } +TEST_F(ValidateImage, ImageTexelPointerSuccess) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %private_image_u32_buffer_0002_r32ui %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateImage, ImageTexelPointerResultTypeNotPointer) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %type_image_u32_buffer_0002_r32ui %private_image_u32_buffer_0002_r32ui %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Result Type to be OpTypePointer")); +} + +TEST_F(ValidateImage, ImageTexelPointerResultTypeNotImageClass) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_image_f32_cube_0101 %private_image_u32_buffer_0002_r32ui %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Result Type to be OpTypePointer whose " + "Storage Class operand is Image")); +} + +TEST_F(ValidateImage, ImageTexelPointerResultTypeNotNumericNorVoid) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32arr4 %private_image_u32_buffer_0002_r32ui %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Expected Result Type to be OpTypePointer whose Type operand " + "must be a scalar numerical type or OpTypeVoid")); +} + +TEST_F(ValidateImage, ImageTexelPointerImageNotResultTypePointer) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %type_image_f32_buffer_0002_r32ui %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 136[%136] cannot be a " + "type")); +} + +TEST_F(ValidateImage, ImageTexelPointerImageNotImage) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %uniform_sampler %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Expected Image to be OpTypePointer with Type OpTypeImage")); +} + +TEST_F(ValidateImage, ImageTexelPointerImageSampledNotResultType) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %uniform_image_f32_cube_0101 %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Image 'Sampled Type' to be the same as the " + "Type pointed to by Result Type")); +} + +TEST_F(ValidateImage, ImageTexelPointerImageDimSubpassDataBad) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %private_image_u32_spd_0002 %u32_0 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "Image Dim SubpassData cannot be used with OpImageTexelPointer")); +} + +TEST_F(ValidateImage, ImageTexelPointerImageCoordTypeBad) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_f32 %private_image_f32_buffer_0002_r32ui %f32_0 %f32_0 +%sum = OpAtomicIAdd %f32 %texel_ptr %f32_1 %f32_0 %f32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Coordinate to be integer scalar or vector")); +} + +TEST_F(ValidateImage, ImageTexelPointerImageCoordSizeBad) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %uniform_image_u32_2d_0000 %u32vec3_012 %u32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Expected Coordinate to have 2 components, but given 3")); +} + +TEST_F(ValidateImage, ImageTexelPointerSampleNotIntScalar) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %private_image_u32_buffer_0002_r32ui %u32_0 %f32_0 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Sample to be integer scalar")); +} + +TEST_F(ValidateImage, ImageTexelPointerSampleNotZeroForImageWithMSZero) { + const std::string body = R"( +%texel_ptr = OpImageTexelPointer %ptr_Image_u32 %private_image_u32_buffer_0002_r32ui %u32_0 %u32_1 +%sum = OpAtomicIAdd %u32 %texel_ptr %u32_1 %u32_0 %u32_1 +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Expected Sample for Image with MS 0 to be a valid " + " for the value 0")); +} + TEST_F(ValidateImage, SampleImplicitLodSuccess) { const std::string body = R"( %img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 @@ -604,10 +808,17 @@ TEST_F(ValidateImage, SampleImplicitLodSuccess) { %res5 = OpImageSampleImplicitLod %f32vec4 %simg %f32vec2_hh Offset %s32vec2_01 %res6 = OpImageSampleImplicitLod %f32vec4 %simg %f32vec2_hh MinLod %f32_0_5 %res7 = OpImageSampleImplicitLod %f32vec4 %simg %f32vec2_hh Bias|Offset|MinLod %f32_0_25 %s32vec2_01 %f32_0_5 +%res8 = OpImageSampleImplicitLod %f32vec4 %simg %f32vec2_hh NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleImplicitLodWrongResultType) { @@ -717,10 +928,17 @@ TEST_F(ValidateImage, SampleExplicitLodSuccessShader) { %res3 = OpImageSampleExplicitLod %f32vec4 %simg %f32vec2_hh ConstOffset %s32vec2_01 %res4 = OpImageSampleExplicitLod %f32vec4 %simg %f32vec3_hhh Offset %s32vec2_01 %res5 = OpImageSampleExplicitLod %f32vec4 %simg %f32vec2_hh Grad|Offset|MinLod %f32vec2_10 %f32vec2_01 %s32vec2_01 %f32_0_5 +%res6 = OpImageSampleExplicitLod %f32vec4 %simg %f32vec4_0000 Lod|NonPrivateTexelKHR %f32_1 )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleExplicitLodSuccessKernel) { @@ -1295,10 +1513,17 @@ TEST_F(ValidateImage, SampleProjExplicitLodSuccess2D) { %res4 = OpImageSampleProjExplicitLod %f32vec4 %simg %f32vec3_hhh ConstOffset %s32vec2_01 %res5 = OpImageSampleProjExplicitLod %f32vec4 %simg %f32vec3_hhh Offset %s32vec2_01 %res7 = OpImageSampleProjExplicitLod %f32vec4 %simg %f32vec3_hhh Grad|Offset %f32vec2_10 %f32vec2_01 %s32vec2_01 +%res8 = OpImageSampleProjExplicitLod %f32vec4 %simg %f32vec3_hhh Lod|NonPrivateTexelKHR %f32_1 )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleProjExplicitLodSuccessRect) { @@ -1422,10 +1647,17 @@ TEST_F(ValidateImage, SampleProjImplicitLodSuccess) { %res5 = OpImageSampleProjImplicitLod %f32vec4 %simg %f32vec3_hhh Offset %s32vec2_01 %res6 = OpImageSampleProjImplicitLod %f32vec4 %simg %f32vec3_hhh MinLod %f32_0_5 %res7 = OpImageSampleProjImplicitLod %f32vec4 %simg %f32vec3_hhh Bias|Offset|MinLod %f32_0_25 %s32vec2_01 %f32_0_5 +%res8 = OpImageSampleProjImplicitLod %f32vec4 %simg %f32vec3_hhh NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleProjImplicitLodWrongResultType) { @@ -1536,10 +1768,17 @@ TEST_F(ValidateImage, SampleDrefImplicitLodSuccess) { %res5 = OpImageSampleDrefImplicitLod %u32 %simg %f32vec2_hh %f32_1 Offset %s32vec2_01 %res6 = OpImageSampleDrefImplicitLod %u32 %simg %f32vec2_hh %f32_1 MinLod %f32_0_5 %res7 = OpImageSampleDrefImplicitLod %u32 %simg %f32vec2_hh %f32_1 Bias|Offset|MinLod %f32_0_25 %s32vec2_01 %f32_0_5 +%res8 = OpImageSampleDrefImplicitLod %u32 %simg %f32vec2_hh %f32_1 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleDrefImplicitLodWrongResultType) { @@ -1652,10 +1891,17 @@ TEST_F(ValidateImage, SampleDrefExplicitLodSuccess) { %res4 = OpImageSampleDrefExplicitLod %s32 %simg %f32vec3_hhh %f32_1 ConstOffset %s32vec3_012 %res5 = OpImageSampleDrefExplicitLod %s32 %simg %f32vec4_0000 %f32_1 Offset %s32vec3_012 %res7 = OpImageSampleDrefExplicitLod %s32 %simg %f32vec3_hhh %f32_1 Grad|Offset %f32vec3_hhh %f32vec3_hhh %s32vec3_012 +%res8 = OpImageSampleDrefExplicitLod %s32 %simg %f32vec4_0000 %f32_1 Lod|NonPrivateTexelKHR %f32_1 )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleDrefExplicitLodWrongResultType) { @@ -1769,10 +2015,17 @@ TEST_F(ValidateImage, SampleProjDrefImplicitLodSuccess) { %res5 = OpImageSampleProjDrefImplicitLod %f32 %simg %f32vec3_hhh %f32_0_5 Offset %s32vec2_01 %res6 = OpImageSampleProjDrefImplicitLod %f32 %simg %f32vec3_hhh %f32_0_5 MinLod %f32_0_5 %res7 = OpImageSampleProjDrefImplicitLod %f32 %simg %f32vec3_hhh %f32_0_5 Bias|Offset|MinLod %f32_0_25 %s32vec2_01 %f32_0_5 +%res8 = OpImageSampleProjDrefImplicitLod %f32 %simg %f32vec3_hhh %f32_0_5 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleProjDrefImplicitLodWrongResultType) { @@ -1885,10 +2138,17 @@ TEST_F(ValidateImage, SampleProjDrefExplicitLodSuccess) { %res3 = OpImageSampleProjDrefExplicitLod %f32 %simg %f32vec2_hh %f32_0_5 ConstOffset %s32_1 %res4 = OpImageSampleProjDrefExplicitLod %f32 %simg %f32vec2_hh %f32_0_5 Offset %s32_1 %res5 = OpImageSampleProjDrefExplicitLod %f32 %simg %f32vec2_hh %f32_0_5 Grad|Offset %f32_0_5 %f32_0_5 %s32_1 +%res6 = OpImageSampleProjDrefExplicitLod %f32 %simg %f32vec2_hh %f32_0_5 Lod|NonPrivateTexelKHR %f32_1 )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SampleProjDrefExplicitLodWrongResultType) { @@ -1979,12 +2239,19 @@ TEST_F(ValidateImage, SampleProjDrefExplicitLodCoordinateSizeTooSmall) { TEST_F(ValidateImage, FetchSuccess) { const std::string body = R"( -%img = OpLoad %type_image_f32_rect_0001 %uniform_image_f32_rect_0001 +%img = OpLoad %type_image_f32_1d_0001 %uniform_image_f32_1d_0001 %res1 = OpImageFetch %f32vec4 %img %u32vec2_01 +%res2 = OpImageFetch %f32vec4 %img %u32vec2_01 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, FetchWrongResultType) { @@ -2118,10 +2385,17 @@ TEST_F(ValidateImage, GatherSuccess) { %simg = OpSampledImage %type_sampled_image_f32_2d_0001 %img %sampler %res1 = OpImageGather %f32vec4 %simg %f32vec4_0000 %u32_1 %res2 = OpImageGather %f32vec4 %simg %f32vec4_0000 %u32_1 ConstOffsets %const_offsets +%res3 = OpImageGather %f32vec4 %simg %f32vec4_0000 %u32_1 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, GatherWrongResultType) { @@ -2367,10 +2641,17 @@ TEST_F(ValidateImage, DrefGatherSuccess) { %simg = OpSampledImage %type_sampled_image_f32_2d_0001 %img %sampler %res1 = OpImageDrefGather %f32vec4 %simg %f32vec4_0000 %f32_0_5 %res2 = OpImageDrefGather %f32vec4 %simg %f32vec4_0000 %f32_0_5 ConstOffsets %const_offsets +%res3 = OpImageDrefGather %f32vec4 %simg %f32vec4_0000 %f32_0_5 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, DrefGatherVoidSampledType) { @@ -3041,7 +3322,7 @@ TEST_F(ValidateImage, QuerySizeLodWrongLodType) { TEST_F(ValidateImage, QuerySizeSuccess) { const std::string body = R"( -%img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 +%img = OpLoad %type_image_f32_2d_0010 %uniform_image_f32_2d_0010 %res1 = OpImageQuerySize %u32vec2 %img )"; @@ -3051,7 +3332,7 @@ TEST_F(ValidateImage, QuerySizeSuccess) { TEST_F(ValidateImage, QuerySizeWrongResultType) { const std::string body = R"( -%img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 +%img = OpLoad %type_image_f32_2d_0010 %uniform_image_f32_2d_0010 %res1 = OpImageQuerySize %f32vec2 %img )"; @@ -3064,7 +3345,7 @@ TEST_F(ValidateImage, QuerySizeWrongResultType) { TEST_F(ValidateImage, QuerySizeNotImage) { const std::string body = R"( -%img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 +%img = OpLoad %type_image_f32_2d_0010 %uniform_image_f32_2d_0010 %sampler = OpLoad %type_sampler %uniform_sampler %simg = OpSampledImage %type_sampled_image_f32_2d_0001 %img %sampler %res1 = OpImageQuerySize %u32vec2 %simg @@ -3076,7 +3357,43 @@ TEST_F(ValidateImage, QuerySizeNotImage) { HasSubstr("Expected Image to be of type OpTypeImage")); } -// TODO(atgoo@github.com) Add more tests for OpQuerySize. +TEST_F(ValidateImage, QuerySizeDimSubpassDataBad) { + const std::string body = R"( +%img = OpLoad %type_image_f32_spd_0002 %uniform_image_f32_spd_0002 +%res1 = OpImageQuerySize %u32vec2 %img +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Image 'Dim' must be 1D, Buffer, 2D, Cube, 3D or Rect")); +} + +TEST_F(ValidateImage, QuerySizeWrongSampling) { + const std::string body = R"( +%img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 +%res1 = OpImageQuerySize %u32vec2 %img +)"; + + CompileSuccessfully(GenerateKernelCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Image must have either 'MS'=1 or 'Sampled'=0 or 'Sampled'=2")); +} + +TEST_F(ValidateImage, QuerySizeWrongNumberOfComponents) { + const std::string body = R"( +%img = OpLoad %type_image_f32_3d_0111 %uniform_image_f32_3d_0111 +%res1 = OpImageQuerySize %u32vec2 %img +)"; + + CompileSuccessfully(GenerateShaderCode(body).c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Result Type has 2 components, but 4 expected")); +} TEST_F(ValidateImage, QueryLodSuccessKernel) { const std::string body = R"( @@ -3339,10 +3656,17 @@ TEST_F(ValidateImage, SparseSampleImplicitLodSuccess) { %res5 = OpImageSparseSampleImplicitLod %struct_u32_f32vec4 %simg %f32vec2_hh Offset %s32vec2_01 %res6 = OpImageSparseSampleImplicitLod %struct_u32_f32vec4 %simg %f32vec2_hh MinLod %f32_0_5 %res7 = OpImageSparseSampleImplicitLod %struct_u64_f32vec4 %simg %f32vec2_hh Bias|Offset|MinLod %f32_0_25 %s32vec2_01 %f32_0_5 +%res8 = OpImageSparseSampleImplicitLod %struct_u32_f32vec4 %simg %f32vec2_hh NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SparseSampleImplicitLodResultTypeNotStruct) { @@ -3460,10 +3784,17 @@ TEST_F(ValidateImage, SparseSampleDrefImplicitLodSuccess) { %res5 = OpImageSparseSampleDrefImplicitLod %struct_u32_u32 %simg %f32vec2_hh %f32_1 Offset %s32vec2_01 %res6 = OpImageSparseSampleDrefImplicitLod %struct_u32_u32 %simg %f32vec2_hh %f32_1 MinLod %f32_0_5 %res7 = OpImageSparseSampleDrefImplicitLod %struct_u32_u32 %simg %f32vec2_hh %f32_1 Bias|Offset|MinLod %f32_0_25 %s32vec2_01 %f32_0_5 +%res8 = OpImageSparseSampleDrefImplicitLod %struct_u32_u32 %simg %f32vec2_hh %f32_1 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SparseSampleDrefImplicitLodResultTypeNotStruct) { @@ -3545,12 +3876,19 @@ TEST_F(ValidateImage, SparseSampleDrefImplicitLodDifferentSampledType) { TEST_F(ValidateImage, SparseFetchSuccess) { const std::string body = R"( -%img = OpLoad %type_image_f32_rect_0001 %uniform_image_f32_rect_0001 +%img = OpLoad %type_image_f32_1d_0001 %uniform_image_f32_1d_0001 %res1 = OpImageSparseFetch %struct_u32_f32vec4 %img %u32vec2_01 +%res2 = OpImageSparseFetch %struct_u32_f32vec4 %img %u32vec2_01 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SparseFetchResultTypeNotStruct) { @@ -3757,10 +4095,17 @@ TEST_F(ValidateImage, SparseGatherSuccess) { %sampler = OpLoad %type_sampler %uniform_sampler %simg = OpSampledImage %type_sampled_image_f32_2d_0001 %img %sampler %res1 = OpImageSparseGather %struct_u32_f32vec4 %simg %f32vec4_0000 %u32_1 +%res2 = OpImageSparseGather %struct_u32_f32vec4 %simg %f32vec4_0000 %u32_1 NonPrivateTexelKHR )"; - CompileSuccessfully(GenerateShaderCode(body).c_str()); - ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); + const std::string extra = R"( +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); } TEST_F(ValidateImage, SparseGatherResultTypeNotStruct) { @@ -3887,6 +4232,226 @@ TEST_F(ValidateImage, SparseTexelsResidentResultTypeNotBool) { HasSubstr("Expected Result Type to be bool scalar type")); } +TEST_F(ValidateImage, MakeTexelVisibleKHRSuccessImageRead) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageRead %u32vec4 %img %u32vec2_01 MakeTexelVisibleKHR|NonPrivateTexelKHR %u32_2 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateImage, MakeTexelVisibleKHRSuccessImageSparseRead) { + const std::string body = R"( +%img = OpLoad %type_image_f32_2d_0002 %uniform_image_f32_2d_0002 +%res1 = OpImageSparseRead %struct_u32_f32vec4 %img %u32vec2_01 MakeTexelVisibleKHR|NonPrivateTexelKHR %u32_2 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateImage, MakeTexelVisibleKHRFailureOpcode) { + const std::string body = R"( +%img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 +%sampler = OpLoad %type_sampler %uniform_sampler +%simg = OpSampledImage %type_sampled_image_f32_2d_0001 %img %sampler +%res1 = OpImageSampleImplicitLod %f32vec4 %simg %f32vec2_hh MakeTexelVisibleKHR|NonPrivateTexelKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Image Operand MakeTexelVisibleKHR can only be used with " + "OpImageRead or OpImageSparseRead: OpImageSampleImplicitLod")); +} + +TEST_F(ValidateImage, MakeTexelVisibleKHRFailureMissingNonPrivate) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageRead %u32vec4 %img %u32vec2_01 MakeTexelVisibleKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Image Operand MakeTexelVisibleKHR requires " + "NonPrivateTexelKHR is also specified: OpImageRead")); +} + +TEST_F(ValidateImage, MakeTexelAvailableKHRSuccessImageWrite) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageWrite %img %u32vec2_01 %u32vec4_0123 MakeTexelAvailableKHR|NonPrivateTexelKHR %u32_2 +)"; + + const std::string extra = R"( +OpCapability StorageImageWriteWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateImage, MakeTexelAvailableKHRFailureOpcode) { + const std::string body = R"( +%img = OpLoad %type_image_f32_2d_0001 %uniform_image_f32_2d_0001 +%sampler = OpLoad %type_sampler %uniform_sampler +%simg = OpSampledImage %type_sampled_image_f32_2d_0001 %img %sampler +%res1 = OpImageSampleImplicitLod %f32vec4 %simg %f32vec2_hh MakeTexelAvailableKHR|NonPrivateTexelKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Image Operand MakeTexelAvailableKHR can only be used " + "with OpImageWrite: OpImageSampleImplicitLod")); +} + +TEST_F(ValidateImage, MakeTexelAvailableKHRFailureMissingNonPrivate) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageWrite %img %u32vec2_01 %u32vec4_0123 MakeTexelAvailableKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageWriteWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Image Operand MakeTexelAvailableKHR requires " + "NonPrivateTexelKHR is also specified: OpImageWrite")); +} + +TEST_F(ValidateImage, VulkanMemoryModelDeviceScopeImageWriteBad) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageWrite %img %u32vec2_01 %u32vec4_0123 MakeTexelAvailableKHR|NonPrivateTexelKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageWriteWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateImage, VulkanMemoryModelDeviceScopeImageWriteGood) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageWrite %img %u32vec2_01 %u32vec4_0123 MakeTexelAvailableKHR|NonPrivateTexelKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageWriteWithoutFormat +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateImage, VulkanMemoryModelDeviceScopeImageReadBad) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageRead %u32vec4 %img %u32vec2_01 MakeTexelVisibleKHR|NonPrivateTexelKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateImage, VulkanMemoryModelDeviceScopeImageReadGood) { + const std::string body = R"( +%img = OpLoad %type_image_u32_2d_0000 %uniform_image_u32_2d_0000 +%res1 = OpImageRead %u32vec4 %img %u32vec2_01 MakeTexelVisibleKHR|NonPrivateTexelKHR %u32_1 +)"; + + const std::string extra = R"( +OpCapability StorageImageReadWithoutFormat +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpExtension "SPV_KHR_vulkan_memory_model" +)"; + CompileSuccessfully(GenerateShaderCode(body, extra, "Fragment", + SPV_ENV_UNIVERSAL_1_3, "VulkanKHR") + .c_str()); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_interfaces_test.cpp b/3rdparty/spirv-tools/test/val/val_interfaces_test.cpp index b673a040f..ce430f615 100644 --- a/3rdparty/spirv-tools/test/val/val_interfaces_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_interfaces_test.cpp @@ -31,6 +31,7 @@ TEST_F(ValidateInterfacesTest, EntryPointMissingInput) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft %2 = OpTypeVoid %3 = OpTypeInt 32 0 %4 = OpTypePointer Input %3 @@ -56,6 +57,7 @@ TEST_F(ValidateInterfacesTest, EntryPointMissingOutput) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft %2 = OpTypeVoid %3 = OpTypeInt 32 0 %4 = OpTypePointer Output %3 @@ -81,6 +83,7 @@ TEST_F(ValidateInterfacesTest, InterfaceMissingUseInSubfunction) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft %2 = OpTypeVoid %3 = OpTypeInt 32 0 %4 = OpTypePointer Input %3 @@ -112,6 +115,7 @@ OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" %2 OpEntryPoint Fragment %1 "func2" +OpExecutionMode %1 OriginUpperLeft %3 = OpTypeVoid %4 = OpTypeInt 32 0 %5 = OpTypePointer Input %4 @@ -138,6 +142,7 @@ OpCapability Shader OpCapability VariablePointers OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %1 "func" +OpExecutionMode %1 OriginUpperLeft %2 = OpTypeVoid %3 = OpTypeInt 32 0 %4 = OpTypePointer Input %3 diff --git a/3rdparty/spirv-tools/test/val/val_layout_test.cpp b/3rdparty/spirv-tools/test/val/val_layout_test.cpp index 145c5439b..e502d8c24 100644 --- a/3rdparty/spirv-tools/test/val/val_layout_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_layout_test.cpp @@ -481,6 +481,7 @@ TEST_F(ValidateEntryPoint, FunctionIsTargetOfEntryPointAndFunctionCallBad) { OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %foo "foo" + OpExecutionMode %foo OriginUpperLeft %voidt = OpTypeVoid %funct = OpTypeFunction %voidt %foo = OpFunction %voidt None %funct @@ -647,6 +648,57 @@ TEST_F(ValidateLayout, ModuleProcessedInvalidInBasicBlock) { HasSubstr("ModuleProcessed cannot appear in a function declaration")); } +TEST_F(ValidateLayout, WebGPUCallerBeforeCalleeBad) { + char str[] = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpEntryPoint GLCompute %main "main" +%void = OpTypeVoid +%voidfn = OpTypeFunction %void +%main = OpFunction %void None %voidfn +%1 = OpLabel +%2 = OpFunctionCall %void %callee + OpReturn + OpFunctionEnd +%callee = OpFunction %void None %voidfn +%3 = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(str, SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_ERROR_INVALID_LAYOUT, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("For WebGPU, functions need to be defined before being " + "called.\n %5 = OpFunctionCall %void %6\n")); +} + +TEST_F(ValidateLayout, WebGPUCalleeBeforeCallerGood) { + char str[] = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpEntryPoint GLCompute %main "main" +%void = OpTypeVoid +%voidfn = OpTypeFunction %void +%callee = OpFunction %void None %voidfn +%3 = OpLabel + OpReturn + OpFunctionEnd +%main = OpFunction %void None %voidfn +%1 = OpLabel +%2 = OpFunctionCall %void %callee + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(str, SPV_ENV_WEBGPU_0); + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + // TODO(umar): Test optional instructions } // namespace diff --git a/3rdparty/spirv-tools/test/val/val_limits_test.cpp b/3rdparty/spirv-tools/test/val/val_limits_test.cpp index 55bf1e5f1..791b709ff 100644 --- a/3rdparty/spirv-tools/test/val/val_limits_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_limits_test.cpp @@ -79,6 +79,70 @@ TEST_F(ValidateLimits, IdEqualToBoundBad) { HasSubstr("Result '64' must be less than the ID bound '64'.")); } +TEST_F(ValidateLimits, IdBoundTooBigDeaultLimit) { + std::string str = header; + + CompileSuccessfully(str); + + // The largest ID used in this program is 64. Let's overwrite the ID bound in + // the header to be 64. This should result in an error because all IDs must + // satisfy: 0 < id < bound. + OverwriteAssembledBinary(3, 0x4FFFFF); + + ASSERT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Invalid SPIR-V. The id bound is larger than the max " + "id bound 4194303.")); +} + +TEST_F(ValidateLimits, IdBoundAtSetLimit) { + std::string str = header; + + CompileSuccessfully(str); + + // The largest ID used in this program is 64. Let's overwrite the ID bound in + // the header to be 64. This should result in an error because all IDs must + // satisfy: 0 < id < bound. + uint32_t id_bound = 0x4FFFFF; + + OverwriteAssembledBinary(3, id_bound); + getValidatorOptions()->universal_limits_.max_id_bound = id_bound; + + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateLimits, IdBoundJustAboveSetLimit) { + std::string str = header; + + CompileSuccessfully(str); + + // The largest ID used in this program is 64. Let's overwrite the ID bound in + // the header to be 64. This should result in an error because all IDs must + // satisfy: 0 < id < bound. + uint32_t id_bound = 5242878; + + OverwriteAssembledBinary(3, id_bound); + getValidatorOptions()->universal_limits_.max_id_bound = id_bound - 1; + + ASSERT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Invalid SPIR-V. The id bound is larger than the max " + "id bound 5242877.")); +} + +TEST_F(ValidateLimits, IdBoundAtInMaxLimit) { + std::string str = header; + + CompileSuccessfully(str); + + uint32_t id_bound = std::numeric_limits::max(); + + OverwriteAssembledBinary(3, id_bound); + getValidatorOptions()->universal_limits_.max_id_bound = id_bound; + + ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + TEST_F(ValidateLimits, StructNumMembersGood) { std::ostringstream spirv; spirv << header << R"( @@ -289,7 +353,7 @@ TEST_F(ValidateLimits, OpTypeFunctionBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("OpTypeFunction may not take more than 255 arguments. " - "OpTypeFunction '2' has 256 arguments.")); + "OpTypeFunction '2[%2]' has 256 arguments.")); } // Valid: OpTypeFunction with 100 arguments (Custom limit: 100) @@ -325,7 +389,7 @@ TEST_F(ValidateLimits, CustomizedOpTypeFunctionBad) { EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), HasSubstr("OpTypeFunction may not take more than 100 arguments. " - "OpTypeFunction '2' has 101 arguments.")); + "OpTypeFunction '2[%2]' has 101 arguments.")); } // Valid: module has 65,535 global variables. @@ -649,14 +713,6 @@ void GenerateSpirvProgramWithCfgNestingDepth(std::string& str, int depth) { } // clang-format on -// Valid: Control Flow Nesting depth is 1023. -TEST_F(ValidateLimits, ControlFlowDepthGood) { - std::string spirv; - GenerateSpirvProgramWithCfgNestingDepth(spirv, 1023); - CompileSuccessfully(spirv); - EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); -} - // Invalid: Control Flow Nesting depth is 1024. (limit is 1023). TEST_F(ValidateLimits, ControlFlowDepthBad) { std::string spirv; diff --git a/3rdparty/spirv-tools/test/val/val_logicals_test.cpp b/3rdparty/spirv-tools/test/val/val_logicals_test.cpp index 449cdd54f..f457887c0 100644 --- a/3rdparty/spirv-tools/test/val/val_logicals_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_logicals_test.cpp @@ -43,6 +43,7 @@ OpCapability Float64)"; %ext_inst = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft %void = OpTypeVoid %func = OpTypeFunction %void %bool = OpTypeBool diff --git a/3rdparty/spirv-tools/test/val/val_memory_test.cpp b/3rdparty/spirv-tools/test/val/val_memory_test.cpp new file mode 100644 index 000000000..a5e5f9101 --- /dev/null +++ b/3rdparty/spirv-tools/test/val/val_memory_test.cpp @@ -0,0 +1,1542 @@ +// Copyright (c) 2018 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Validation tests for memory/storage + +#include +#include + +#include "gmock/gmock.h" +#include "test/unit_spirv.h" +#include "test/val/val_fixtures.h" + +namespace spvtools { +namespace val { +namespace { + +using ::testing::Eq; +using ::testing::HasSubstr; + +using ValidateMemory = spvtest::ValidateBase; + +TEST_F(ValidateMemory, VulkanUniformConstantOnNonOpaqueResourceBad) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer UniformConstant %float +%2 = OpVariable %float_ptr UniformConstant +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("From Vulkan spec, section 14.5.2:\n" + "Variables identified with the UniformConstant storage class " + "are used only as handles to refer to opaque resources. Such " + "variables must be typed as OpTypeImage, OpTypeSampler, " + "OpTypeSampledImage, OpTypeAccelerationStructureNV, or an " + "array of one of these types.")); +} + +TEST_F(ValidateMemory, VulkanUniformConstantOnOpaqueResourceGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +OpDecorate %2 DescriptorSet 0 +OpDecorate %2 Binding 0 +%sampler = OpTypeSampler +%sampler_ptr = OpTypePointer UniformConstant %sampler +%2 = OpVariable %sampler_ptr UniformConstant +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanUniformConstantOnNonOpaqueResourceArrayBad) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%uint = OpTypeInt 32 0 +%array_size = OpConstant %uint 5 +%array = OpTypeArray %float %array_size +%array_ptr = OpTypePointer UniformConstant %array +%2 = OpVariable %array_ptr UniformConstant +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("From Vulkan spec, section 14.5.2:\n" + "Variables identified with the UniformConstant storage class " + "are used only as handles to refer to opaque resources. Such " + "variables must be typed as OpTypeImage, OpTypeSampler, " + "OpTypeSampledImage, OpTypeAccelerationStructureNV, or an " + "array of one of these types.")); +} + +TEST_F(ValidateMemory, VulkanUniformConstantOnOpaqueResourceArrayGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +OpDecorate %2 DescriptorSet 0 +OpDecorate %2 Binding 0 +%sampler = OpTypeSampler +%uint = OpTypeInt 32 0 +%array_size = OpConstant %uint 5 +%array = OpTypeArray %sampler %array_size +%array_ptr = OpTypePointer UniformConstant %array +%2 = OpVariable %array_ptr UniformConstant +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanUniformConstantOnOpaqueResourceRuntimeArrayGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +OpDecorate %2 DescriptorSet 0 +OpDecorate %2 Binding 0 +%sampler = OpTypeSampler +%uint = OpTypeInt 32 0 +%array = OpTypeRuntimeArray %sampler +%array_ptr = OpTypePointer UniformConstant %array +%2 = OpVariable %array_ptr UniformConstant +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanUniformOnIntBad) { + char src[] = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint GLCompute %kernel "main" + OpExecutionMode %kernel LocalSize 1 1 1 + + OpDecorate %var DescriptorSet 0 + OpDecorate %var Binding 0 + + %voidty = OpTypeVoid +%kernelty = OpTypeFunction %voidty + %intty = OpTypeInt 32 0 + %varty = OpTypePointer Uniform %intty + %value = OpConstant %intty 42 + + %var = OpVariable %varty Uniform + + %kernel = OpFunction %voidty None %kernelty + %label = OpLabel + OpStore %var %value + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(src, SPV_ENV_VULKAN_1_1); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("From Vulkan spec, section 14.5.2:\n" + "Variables identified with the Uniform storage class are used " + "to access transparent buffer backed resources. Such variables " + "must be typed as OpTypeStruct, or an array of this type")); +} + +// #version 440 +// #extension GL_EXT_nonuniform_qualifier : enable +// layout(binding = 1) uniform sampler2D s2d[][2]; +// layout(location = 0) in nonuniformEXT int i; +// void main() +// { +// vec4 v = texture(s2d[i][i], vec2(0.3)); +// } +TEST_F(ValidateMemory, VulkanUniformOnRuntimeArrayOfArrayBad) { + char src[] = R"( + OpCapability Shader + OpCapability ShaderNonUniformEXT + OpCapability RuntimeDescriptorArrayEXT + OpCapability SampledImageArrayNonUniformIndexingEXT + OpExtension "SPV_EXT_descriptor_indexing" + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" %i + OpSource GLSL 440 + OpSourceExtension "GL_EXT_nonuniform_qualifier" + OpName %main "main" + OpName %v "v" + OpName %s2d "s2d" + OpName %i "i" + OpDecorate %s2d DescriptorSet 0 + OpDecorate %s2d Binding 1 + OpDecorate %i Location 0 + OpDecorate %i NonUniformEXT + OpDecorate %21 NonUniformEXT + OpDecorate %22 NonUniformEXT + OpDecorate %25 NonUniformEXT + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %v4float = OpTypeVector %float 4 +%_ptr_Function_v4float = OpTypePointer Function %v4float + %10 = OpTypeImage %float 2D 0 0 0 1 Unknown + %11 = OpTypeSampledImage %10 + %uint = OpTypeInt 32 0 + %uint_2 = OpConstant %uint 2 +%_arr_11_uint_2 = OpTypeArray %11 %uint_2 +%_runtimearr__arr_11_uint_2 = OpTypeRuntimeArray %_arr_11_uint_2 +%_ptr_Uniform__runtimearr__arr_11_uint_2 = OpTypePointer Uniform %_runtimearr__arr_11_uint_2 + %s2d = OpVariable %_ptr_Uniform__runtimearr__arr_11_uint_2 Uniform + %int = OpTypeInt 32 1 +%_ptr_Input_int = OpTypePointer Input %int + %i = OpVariable %_ptr_Input_int Input +%_ptr_Uniform_11 = OpTypePointer Uniform %11 + %v2float = OpTypeVector %float 2 +%float_0_300000012 = OpConstant %float 0.300000012 + %28 = OpConstantComposite %v2float %float_0_300000012 %float_0_300000012 + %float_0 = OpConstant %float 0 + %main = OpFunction %void None %3 + %5 = OpLabel + %v = OpVariable %_ptr_Function_v4float Function + %21 = OpLoad %int %i + %22 = OpLoad %int %i + %24 = OpAccessChain %_ptr_Uniform_11 %s2d %21 %22 + %25 = OpLoad %11 %24 + %30 = OpImageSampleExplicitLod %v4float %25 %28 Lod %float_0 + OpStore %v %30 + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(src, SPV_ENV_VULKAN_1_1); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("From Vulkan spec, section 14.5.2:\n" + "Variables identified with the Uniform storage class are used " + "to access transparent buffer backed resources. Such variables " + "must be typed as OpTypeStruct, or an array of this type")); +} + +// #version 440 +// layout (set=1, binding=1) uniform sampler2D variableName[2][2]; +// void main() { +// } +TEST_F(ValidateMemory, VulkanUniformOnArrayOfArrayBad) { + char src[] = R"( + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %main "main" + OpSource GLSL 440 + OpName %main "main" + OpName %variableName "variableName" + OpDecorate %variableName DescriptorSet 1 + OpDecorate %variableName Binding 1 + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %7 = OpTypeImage %float 2D 0 0 0 1 Unknown + %8 = OpTypeSampledImage %7 + %uint = OpTypeInt 32 0 + %uint_2 = OpConstant %uint 2 +%_arr_8_uint_2 = OpTypeArray %8 %uint_2 +%_arr__arr_8_uint_2_uint_2 = OpTypeArray %_arr_8_uint_2 %uint_2 +%_ptr_Uniform__arr__arr_8_uint_2_uint_2 = OpTypePointer Uniform %_arr__arr_8_uint_2_uint_2 +%variableName = OpVariable %_ptr_Uniform__arr__arr_8_uint_2_uint_2 Uniform + %main = OpFunction %void None %3 + %5 = OpLabel + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(src, SPV_ENV_VULKAN_1_1); + ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("From Vulkan spec, section 14.5.2:\n" + "Variables identified with the Uniform storage class are used " + "to access transparent buffer backed resources. Such variables " + "must be typed as OpTypeStruct, or an array of this type")); +} + +TEST_F(ValidateMemory, MismatchingStorageClassesBad) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Uniform %float +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +%2 = OpVariable %float_ptr Function +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "From SPIR-V spec, section 3.32.8 on OpVariable:\n" + "Its Storage Class operand must be the same as the Storage Class " + "operand of the result type.")); +} + +TEST_F(ValidateMemory, MatchingStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Function %float +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +%2 = OpVariable %float_ptr Function +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateMemory, WebGPUInitializerWithOutputStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Output %float +%init_val = OpConstant %float 1.0 +%1 = OpVariable %float_ptr Output %init_val +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%2 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateMemory, WebGPUInitializerWithFunctionStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Function %float +%init_val = OpConstant %float 1.0 +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +%2 = OpVariable %float_ptr Function %init_val +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateMemory, WebGPUInitializerWithPrivateStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Private %float +%init_val = OpConstant %float 1.0 +%1 = OpVariable %float_ptr Private %init_val +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%2 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateMemory, WebGPUInitializerWithDisallowedStorageClassesBad) { + std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Uniform %float +%init_val = OpConstant %float 1.0 +%1 = OpVariable %float_ptr Uniform %init_val +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%2 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "OpVariable, '5[%5]', has a disallowed initializer & storage " + "class combination.\nFrom WebGPU execution environment spec:\n" + "Variable declarations that include initializers must have one of " + "the following storage classes: Output, Private, or Function\n" + " %5 = OpVariable %_ptr_Uniform_float Uniform %float_1\n")); +} + +TEST_F(ValidateMemory, VulkanInitializerWithOutputStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Output %float +%init_val = OpConstant %float 1.0 +%1 = OpVariable %float_ptr Output %init_val +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%2 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanInitializerWithFunctionStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Function %float +%init_val = OpConstant %float 1.0 +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +%2 = OpVariable %float_ptr Function %init_val +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanInitializerWithPrivateStorageClassesGood) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Private %float +%init_val = OpConstant %float 1.0 +%1 = OpVariable %float_ptr Private %init_val +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%2 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanInitializerWithDisallowedStorageClassesBad) { + std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%float = OpTypeFloat 32 +%float_ptr = OpTypePointer Input %float +%init_val = OpConstant %float 1.0 +%1 = OpVariable %float_ptr Input %init_val +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%2 = OpLabel +OpReturn +OpFunctionEnd +)"; + CompileSuccessfully(spirv.c_str(), SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "OpVariable, '5[%5]', has a disallowed initializer & storage " + "class combination.\nFrom Vulkan spec, Appendix A:\n" + "Variable declarations that include initializers must have one of " + "the following storage classes: Output, Private, or Function\n " + "%5 = OpVariable %_ptr_Input_float Input %float_1\n")); +} + +TEST_F(ValidateMemory, ArrayLenCorrectResultType) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %_runtimearr_float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %uint %10 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateMemory, ArrayLenIndexCorrectWith2Members) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %float %_runtimearr_float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %uint %10 1 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateMemory, ArrayLenResultNotIntType) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_6 = OpTypeStruct %_runtimearr_float +%_ptr_Function__struct_6 = OpTypePointer Function %_struct_6 + %1 = OpFunction %void None %3 + %8 = OpLabel + %9 = OpVariable %_ptr_Function__struct_6 Function + %10 = OpArrayLength %float %9 0 + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "The Result Type of OpArrayLength '10[%10]' must be OpTypeInt " + "with width 32 and signedness 0.\n %10 = OpArrayLength %float %9 " + "0\n")); +} + +TEST_F(ValidateMemory, ArrayLenResultNot32bits) { + std::string spirv = R"( + OpCapability Shader + OpCapability Int16 + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %ushort = OpTypeInt 16 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %_runtimearr_float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %ushort %10 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "The Result Type of OpArrayLength '11[%11]' must be OpTypeInt " + "with width 32 and signedness 0.\n %11 = OpArrayLength %ushort %10 " + "0\n")); +} + +TEST_F(ValidateMemory, ArrayLenResultSigned) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %int = OpTypeInt 32 1 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %_runtimearr_float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %int %10 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "The Result Type of OpArrayLength '11[%11]' must be OpTypeInt " + "with width 32 and signedness 0.\n %11 = OpArrayLength %int %10 " + "0\n")); +} + +TEST_F(ValidateMemory, ArrayLenInputNotStruct) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %_runtimearr_float +%_ptr_Function_float = OpTypePointer Function %float + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function_float Function + %11 = OpArrayLength %uint %10 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("The Struture's type in OpArrayLength '11[%11]' " + "must be a pointer to an OpTypeStruct.")); +} + +TEST_F(ValidateMemory, ArrayLenInputLastMemberNoRTA) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %uint %10 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("The Struture's last member in OpArrayLength '11[%11]' " + "must be an OpTypeRuntimeArray.\n %11 = OpArrayLength %uint " + "%10 0\n")); +} + +TEST_F(ValidateMemory, ArrayLenInputLastMemberNoRTA2) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %_runtimearr_float %float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %uint %10 1 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("The Struture's last member in OpArrayLength '11[%11]' " + "must be an OpTypeRuntimeArray.\n %11 = OpArrayLength %uint " + "%10 1\n")); +} + +TEST_F(ValidateMemory, ArrayLenIndexNotLastMember) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %float %_runtimearr_float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpArrayLength %uint %10 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "The array member in OpArrayLength '11[%11]' must be an the " + "last member of the struct.\n %11 = OpArrayLength %uint %10 0\n")); +} + +TEST_F(ValidateMemory, ArrayLenIndexNotPointerToStruct) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 +%_runtimearr_float = OpTypeRuntimeArray %float + %_struct_7 = OpTypeStruct %float %_runtimearr_float +%_ptr_Function__struct_7 = OpTypePointer Function %_struct_7 + %1 = OpFunction %void None %3 + %9 = OpLabel + %10 = OpVariable %_ptr_Function__struct_7 Function + %11 = OpLoad %_struct_7 %10 + %12 = OpArrayLength %uint %11 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "The Struture's type in OpArrayLength '12[%12]' must be a " + "pointer to an OpTypeStruct.\n %12 = OpArrayLength %uint %11 0\n")); +} + +TEST_F(ValidateMemory, ArrayLenPointerIsAType) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + %void = OpTypeVoid + %3 = OpTypeFunction %void + %float = OpTypeFloat 32 + %uint = OpTypeInt 32 0 + %1 = OpFunction %void None %3 + %9 = OpLabel + %12 = OpArrayLength %uint %float 0 + OpReturn + OpFunctionEnd + +)"; + + CompileSuccessfully(spirv.c_str()); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), HasSubstr("Operand 4[%float] cannot be a " + "type")); +} + +TEST_F(ValidateMemory, PushConstantNotStructGood) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %ptr = OpTypePointer PushConstant %float + %pc = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateMemory, VulkanPushConstantNotStructBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %ptr = OpTypePointer PushConstant %float + %pc = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("PushConstant OpVariable '6[%6]' has illegal " + "type.\nFrom Vulkan spec, section 14.5.1:\n" + "Such variables must be typed as OpTypeStruct, " + "or an array of this type")); +} + +TEST_F(ValidateMemory, VulkanPushConstant) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %1 "main" + OpExecutionMode %1 OriginUpperLeft + + OpDecorate %struct Block + OpMemberDecorate %struct 0 Offset 0 + + %void = OpTypeVoid + %voidfn = OpTypeFunction %void + %float = OpTypeFloat 32 + %struct = OpTypeStruct %float + %ptr = OpTypePointer PushConstant %struct + %pc = OpVariable %ptr PushConstant + + %1 = OpFunction %void None %voidfn + %label = OpLabel + OpReturn + OpFunctionEnd +)"; + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeLoadBad1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%load = OpLoad %int %var MakePointerVisibleKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeLoadBad2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%load = OpLoad %int %var Aligned|MakePointerVisibleKHR|NonPrivatePointerKHR 4 %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeLoadGood1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%load = OpLoad %int %var MakePointerVisibleKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeLoadGood2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +%load = OpLoad %int %var Aligned|MakePointerVisibleKHR|NonPrivatePointerKHR 4 %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeStoreBad1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpStore %var %device MakePointerAvailableKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeStoreBad2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpStore %var %device Aligned|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeStoreGood1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpStore %var %device MakePointerAvailableKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeStoreGood2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpStore %var %device Aligned|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemoryBad1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemory %var1 %var2 MakePointerAvailableKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemoryBad2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemory %var1 %var2 Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %device %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemoryBad3) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemory %var1 %var2 Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %workgroup %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemoryGood1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemory %var1 %var2 MakePointerAvailableKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemoryGood2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 2 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemory %var1 %var2 Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %device %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemoryGood3) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 2 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemory %var1 %var2 Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %workgroup %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemorySizedBad1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemorySized %var1 %var2 %device MakePointerAvailableKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemorySizedBad2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemorySized %var1 %var2 %device Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %device %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemorySizedBad3) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemorySized %var1 %var2 %device Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %workgroup %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_ERROR_INVALID_DATA, + ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Use of device scope with VulkanKHR memory model requires the " + "VulkanMemoryModelDeviceScopeKHR capability")); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemorySizedGood1) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemorySized %var1 %var2 %device MakePointerAvailableKHR|NonPrivatePointerKHR %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemorySizedGood2) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 2 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemorySized %var1 %var2 %device Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %device %workgroup +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, VulkanMemoryModelDeviceScopeCopyMemorySizedGood3) { + const std::string spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpCapability VulkanMemoryModelDeviceScopeKHR +OpCapability Linkage +OpCapability Addresses +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +%void = OpTypeVoid +%int = OpTypeInt 32 0 +%device = OpConstant %int 1 +%workgroup = OpConstant %int 2 +%int_ptr_ssbo = OpTypePointer StorageBuffer %int +%var1 = OpVariable %int_ptr_ssbo StorageBuffer +%var2 = OpVariable %int_ptr_ssbo StorageBuffer +%voidfn = OpTypeFunction %void +%func = OpFunction %void None %voidfn +%entry = OpLabel +OpCopyMemorySized %var1 %var2 %device Aligned|MakePointerVisibleKHR|MakePointerAvailableKHR|NonPrivatePointerKHR 4 %workgroup %device +OpReturn +OpFunctionEnd +)"; + + CompileSuccessfully(spirv, SPV_ENV_UNIVERSAL_1_3); + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_UNIVERSAL_1_3)); +} + +TEST_F(ValidateMemory, ArrayLengthStructIsLabel) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpName %20 "incorrect" +%void = OpTypeVoid +%3 = OpTypeFunction %void +%float = OpTypeFloat 32 +%v4float = OpTypeVector %float 4 +%uint = OpTypeInt 32 0 +%4 = OpFunction %void None %3 +%20 = OpLabel +%24 = OpArrayLength %uint %20 0 +%25 = OpLoad %v4float %24 +OpReturnValue %25 +OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Operand 1[%incorrect] requires a type")); +} + +} // namespace +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_modes_test.cpp b/3rdparty/spirv-tools/test/val/val_modes_test.cpp new file mode 100644 index 000000000..7f1ef093d --- /dev/null +++ b/3rdparty/spirv-tools/test/val/val_modes_test.cpp @@ -0,0 +1,801 @@ +// Copyright (c) 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "gmock/gmock.h" +#include "source/spirv_target_env.h" +#include "test/test_fixture.h" +#include "test/unit_spirv.h" +#include "test/val/val_fixtures.h" + +namespace spvtools { +namespace val { +namespace { + +using ::testing::Combine; +using ::testing::HasSubstr; +using ::testing::Values; +using ::testing::ValuesIn; + +using ValidateMode = spvtest::ValidateBase; + +const std::string kVoidFunction = R"(%void = OpTypeVoid +%void_fn = OpTypeFunction %void +%main = OpFunction %void None %void_fn +%entry = OpLabel +OpReturn +OpFunctionEnd +)"; + +TEST_F(ValidateMode, GLComputeNoMode) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateMode, GLComputeNoModeVulkan) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_VULKAN_1_0; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions(env)); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("In the Vulkan environment, GLCompute execution model entry " + "points require either the LocalSize execution mode or an " + "object decorated with WorkgroupSize must be specified.")); +} + +TEST_F(ValidateMode, GLComputeNoModeVulkanWorkgroupSize) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpDecorate %int3_1 BuiltIn WorkgroupSize +%int = OpTypeInt 32 0 +%int3 = OpTypeVector %int 3 +%int_1 = OpConstant %int 1 +%int3_1 = OpConstantComposite %int3 %int_1 %int_1 %int_1 +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_VULKAN_1_0; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions(env)); +} + +TEST_F(ValidateMode, GLComputeVulkanLocalSize) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint GLCompute %main "main" +OpExecutionMode %main LocalSize 1 1 1 +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_VULKAN_1_0; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions(env)); +} + +TEST_F(ValidateMode, FragmentOriginLowerLeftVulkan) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginLowerLeft +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_VULKAN_1_0; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions(env)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("In the Vulkan environment, the OriginLowerLeft " + "execution mode must not be used.")); +} + +TEST_F(ValidateMode, FragmentPixelCenterIntegerVulkan) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpExecutionMode %main PixelCenterInteger +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_VULKAN_1_0; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions(env)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("In the Vulkan environment, the PixelCenterInteger " + "execution mode must not be used.")); +} + +TEST_F(ValidateMode, GeometryNoOutputMode) { + const std::string spirv = R"( +OpCapability Geometry +OpMemoryModel Logical GLSL450 +OpEntryPoint Geometry %main "main" +OpExecutionMode %main InputPoints +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Geometry execution model entry points must specify " + "exactly one of OutputPoints, OutputLineStrip or " + "OutputTriangleStrip execution modes.")); +} + +TEST_F(ValidateMode, GeometryNoInputMode) { + const std::string spirv = R"( +OpCapability Geometry +OpMemoryModel Logical GLSL450 +OpEntryPoint Geometry %main "main" +OpExecutionMode %main OutputPoints +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Geometry execution model entry points must specify exactly " + "one of InputPoints, InputLines, InputLinesAdjacency, " + "Triangles or InputTrianglesAdjacency execution modes.")); +} + +TEST_F(ValidateMode, FragmentNoOrigin) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Fragment execution model entry points require either an " + "OriginUpperLeft or OriginLowerLeft execution mode.")); +} + +TEST_F(ValidateMode, FragmentBothOrigins) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpExecutionMode %main OriginLowerLeft +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Fragment execution model entry points can only specify one of " + "OriginUpperLeft or OriginLowerLeft execution modes.")); +} + +TEST_F(ValidateMode, FragmentDepthGreaterAndLess) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpExecutionMode %main DepthGreater +OpExecutionMode %main DepthLess +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Fragment execution model entry points can specify at " + "most one of DepthGreater, DepthLess or DepthUnchanged " + "execution modes.")); +} + +TEST_F(ValidateMode, FragmentDepthGreaterAndUnchanged) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpExecutionMode %main DepthGreater +OpExecutionMode %main DepthUnchanged +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Fragment execution model entry points can specify at " + "most one of DepthGreater, DepthLess or DepthUnchanged " + "execution modes.")); +} + +TEST_F(ValidateMode, FragmentDepthLessAndUnchanged) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpExecutionMode %main DepthLess +OpExecutionMode %main DepthUnchanged +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Fragment execution model entry points can specify at " + "most one of DepthGreater, DepthLess or DepthUnchanged " + "execution modes.")); +} + +TEST_F(ValidateMode, FragmentAllDepths) { + const std::string spirv = R"( +OpCapability Shader +OpMemoryModel Logical GLSL450 +OpEntryPoint Fragment %main "main" +OpExecutionMode %main OriginUpperLeft +OpExecutionMode %main DepthGreater +OpExecutionMode %main DepthLess +OpExecutionMode %main DepthUnchanged +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Fragment execution model entry points can specify at " + "most one of DepthGreater, DepthLess or DepthUnchanged " + "execution modes.")); +} + +TEST_F(ValidateMode, TessellationControlSpacingEqualAndFractionalOdd) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %main "main" +OpExecutionMode %main SpacingEqual +OpExecutionMode %main SpacingFractionalOdd +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, TessellationControlSpacingEqualAndSpacingFractionalEven) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %main "main" +OpExecutionMode %main SpacingEqual +OpExecutionMode %main SpacingFractionalEven +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, + TessellationControlSpacingFractionalOddAndSpacingFractionalEven) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %main "main" +OpExecutionMode %main SpacingFractionalOdd +OpExecutionMode %main SpacingFractionalEven +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, TessellationControlAllSpacing) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %main "main" +OpExecutionMode %main SpacingEqual +OpExecutionMode %main SpacingFractionalOdd +OpExecutionMode %main SpacingFractionalEven +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, + TessellationEvaluationSpacingEqualAndSpacingFractionalOdd) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationEvaluation %main "main" +OpExecutionMode %main SpacingEqual +OpExecutionMode %main SpacingFractionalOdd +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, + TessellationEvaluationSpacingEqualAndSpacingFractionalEven) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationEvaluation %main "main" +OpExecutionMode %main SpacingEqual +OpExecutionMode %main SpacingFractionalEven +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, + TessellationEvaluationSpacingFractionalOddAndSpacingFractionalEven) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationEvaluation %main "main" +OpExecutionMode %main SpacingFractionalOdd +OpExecutionMode %main SpacingFractionalEven +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, TessellationEvaluationAllSpacing) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationEvaluation %main "main" +OpExecutionMode %main SpacingEqual +OpExecutionMode %main SpacingFractionalOdd +OpExecutionMode %main SpacingFractionalEven +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify " + "at most one of SpacingEqual, SpacingFractionalOdd or " + "SpacingFractionalEven execution modes.")); +} + +TEST_F(ValidateMode, TessellationControlBothVertex) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationControl %main "main" +OpExecutionMode %main VertexOrderCw +OpExecutionMode %main VertexOrderCcw +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify at most " + "one of VertexOrderCw or VertexOrderCcw execution modes.")); +} + +TEST_F(ValidateMode, TessellationEvaluationBothVertex) { + const std::string spirv = R"( +OpCapability Tessellation +OpMemoryModel Logical GLSL450 +OpEntryPoint TessellationEvaluation %main "main" +OpExecutionMode %main VertexOrderCw +OpExecutionMode %main VertexOrderCcw +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Tessellation execution model entry points can specify at most " + "one of VertexOrderCw or VertexOrderCcw execution modes.")); +} + +using ValidateModeGeometry = spvtest::ValidateBase, + std::tuple>>; + +TEST_P(ValidateModeGeometry, ExecutionMode) { + std::vector input_modes; + std::vector output_modes; + input_modes.push_back(std::get<0>(std::get<0>(GetParam()))); + input_modes.push_back(std::get<1>(std::get<0>(GetParam()))); + input_modes.push_back(std::get<2>(std::get<0>(GetParam()))); + input_modes.push_back(std::get<3>(std::get<0>(GetParam()))); + input_modes.push_back(std::get<4>(std::get<0>(GetParam()))); + output_modes.push_back(std::get<0>(std::get<1>(GetParam()))); + output_modes.push_back(std::get<1>(std::get<1>(GetParam()))); + output_modes.push_back(std::get<2>(std::get<1>(GetParam()))); + + std::ostringstream sstr; + sstr << "OpCapability Geometry\n"; + sstr << "OpMemoryModel Logical GLSL450\n"; + sstr << "OpEntryPoint Geometry %main \"main\"\n"; + size_t num_input_modes = 0; + for (auto input : input_modes) { + if (!input.empty()) { + num_input_modes++; + sstr << "OpExecutionMode %main " << input << "\n"; + } + } + size_t num_output_modes = 0; + for (auto output : output_modes) { + if (!output.empty()) { + num_output_modes++; + sstr << "OpExecutionMode %main " << output << "\n"; + } + } + sstr << "%void = OpTypeVoid\n"; + sstr << "%void_fn = OpTypeFunction %void\n"; + sstr << "%int = OpTypeInt 32 0\n"; + sstr << "%int1 = OpConstant %int 1\n"; + sstr << "%main = OpFunction %void None %void_fn\n"; + sstr << "%entry = OpLabel\n"; + sstr << "OpReturn\n"; + sstr << "OpFunctionEnd\n"; + + CompileSuccessfully(sstr.str()); + if (num_input_modes == 1 && num_output_modes == 1) { + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); + } else { + EXPECT_THAT(SPV_ERROR_INVALID_DATA, ValidateInstructions()); + if (num_input_modes != 1) { + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Geometry execution model entry points must " + "specify exactly one of InputPoints, InputLines, " + "InputLinesAdjacency, Triangles or " + "InputTrianglesAdjacency execution modes.")); + } else { + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Geometry execution model entry points must specify " + "exactly one of OutputPoints, OutputLineStrip or " + "OutputTriangleStrip execution modes.")); + } + } +} + +INSTANTIATE_TEST_CASE_P( + GeometryRequiredModes, ValidateModeGeometry, + Combine(Combine(Values("InputPoints", ""), Values("InputLines", ""), + Values("InputLinesAdjacency", ""), Values("Triangles", ""), + Values("InputTrianglesAdjacency", "")), + Combine(Values("OutputPoints", ""), Values("OutputLineStrip", ""), + Values("OutputTriangleStrip", "")))); + +using ValidateModeExecution = + spvtest::ValidateBase>; + +TEST_P(ValidateModeExecution, ExecutionMode) { + const spv_result_t expectation = std::get<0>(GetParam()); + const std::string error = std::get<1>(GetParam()); + const std::string model = std::get<2>(GetParam()); + const std::string mode = std::get<3>(GetParam()); + const spv_target_env env = std::get<4>(GetParam()); + + std::ostringstream sstr; + sstr << "OpCapability Shader\n"; + sstr << "OpCapability Geometry\n"; + sstr << "OpCapability Tessellation\n"; + sstr << "OpCapability TransformFeedback\n"; + if (!spvIsVulkanEnv(env)) { + sstr << "OpCapability Kernel\n"; + if (env == SPV_ENV_UNIVERSAL_1_3) { + sstr << "OpCapability SubgroupDispatch\n"; + } + } + sstr << "OpMemoryModel Logical GLSL450\n"; + sstr << "OpEntryPoint " << model << " %main \"main\"\n"; + if (mode.find("LocalSizeId") == 0 || mode.find("LocalSizeHintId") == 0 || + mode.find("SubgroupsPerWorkgroupId") == 0) { + sstr << "OpExecutionModeId %main " << mode << "\n"; + } else { + sstr << "OpExecutionMode %main " << mode << "\n"; + } + if (model == "Geometry") { + if (!(mode.find("InputPoints") == 0 || mode.find("InputLines") == 0 || + mode.find("InputLinesAdjacency") == 0 || + mode.find("Triangles") == 0 || + mode.find("InputTrianglesAdjacency") == 0)) { + // Exactly one of the above modes is required for Geometry shaders. + sstr << "OpExecutionMode %main InputPoints\n"; + } + if (!(mode.find("OutputPoints") == 0 || mode.find("OutputLineStrip") == 0 || + mode.find("OutputTriangleStrip") == 0)) { + // Exactly one of the above modes is required for Geometry shaders. + sstr << "OpExecutionMode %main OutputPoints\n"; + } + } else if (model == "Fragment") { + if (!(mode.find("OriginUpperLeft") == 0 || + mode.find("OriginLowerLeft") == 0)) { + // Exactly one of the above modes is required for Fragment shaders. + sstr << "OpExecutionMode %main OriginUpperLeft\n"; + } + } + sstr << "%void = OpTypeVoid\n"; + sstr << "%void_fn = OpTypeFunction %void\n"; + sstr << "%int = OpTypeInt 32 0\n"; + sstr << "%int1 = OpConstant %int 1\n"; + sstr << "%main = OpFunction %void None %void_fn\n"; + sstr << "%entry = OpLabel\n"; + sstr << "OpReturn\n"; + sstr << "OpFunctionEnd\n"; + + CompileSuccessfully(sstr.str(), env); + EXPECT_THAT(expectation, ValidateInstructions(env)); + if (expectation != SPV_SUCCESS) { + EXPECT_THAT(getDiagnosticString(), HasSubstr(error)); + } +} + +INSTANTIATE_TEST_CASE_P( + ValidateModeGeometryOnlyGoodSpv10, ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), Values("Geometry"), + Values("Invocations 3", "InputPoints", "InputLines", + "InputLinesAdjacency", "InputTrianglesAdjacency", + "OutputPoints", "OutputLineStrip", "OutputTriangleStrip"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeGeometryOnlyBadSpv10, ValidateModeExecution, + Combine(Values(SPV_ERROR_INVALID_DATA), + Values("Execution mode can only be used with the Geometry " + "execution model."), + Values("Fragment", "TessellationEvaluation", "TessellationControl", + "GLCompute", "Vertex", "Kernel"), + Values("Invocations 3", "InputPoints", "InputLines", + "InputLinesAdjacency", "InputTrianglesAdjacency", + "OutputPoints", "OutputLineStrip", "OutputTriangleStrip"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeTessellationOnlyGoodSpv10, ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), + Values("TessellationControl", "TessellationEvaluation"), + Values("SpacingEqual", "SpacingFractionalEven", + "SpacingFractionalOdd", "VertexOrderCw", "VertexOrderCcw", + "PointMode", "Quads", "Isolines"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeTessellationOnlyBadSpv10, ValidateModeExecution, + Combine(Values(SPV_ERROR_INVALID_DATA), + Values("Execution mode can only be used with a tessellation " + "execution model."), + Values("Fragment", "Geometry", "GLCompute", "Vertex", "Kernel"), + Values("SpacingEqual", "SpacingFractionalEven", + "SpacingFractionalOdd", "VertexOrderCw", "VertexOrderCcw", + "PointMode", "Quads", "Isolines"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P(ValidateModeGeometryAndTessellationGoodSpv10, + ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), + Values("TessellationControl", + "TessellationEvaluation", "Geometry"), + Values("Triangles", "OutputVertices 3"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeGeometryAndTessellationBadSpv10, ValidateModeExecution, + Combine(Values(SPV_ERROR_INVALID_DATA), + Values("Execution mode can only be used with a Geometry or " + "tessellation execution model."), + Values("Fragment", "GLCompute", "Vertex", "Kernel"), + Values("Triangles", "OutputVertices 3"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeFragmentOnlyGoodSpv10, ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), Values("Fragment"), + Values("PixelCenterInteger", "OriginUpperLeft", "OriginLowerLeft", + "EarlyFragmentTests", "DepthReplacing", "DepthLess", + "DepthUnchanged"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeFragmentOnlyBadSpv10, ValidateModeExecution, + Combine(Values(SPV_ERROR_INVALID_DATA), + Values("Execution mode can only be used with the Fragment " + "execution model."), + Values("Geometry", "TessellationControl", "TessellationEvaluation", + "GLCompute", "Vertex", "Kernel"), + Values("PixelCenterInteger", "OriginUpperLeft", "OriginLowerLeft", + "EarlyFragmentTests", "DepthReplacing", "DepthLess", + "DepthUnchanged"), + Values(SPV_ENV_UNIVERSAL_1_0))); + +INSTANTIATE_TEST_CASE_P(ValidateModeKernelOnlyGoodSpv13, ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), + Values("Kernel"), + Values("LocalSizeHint 1 1 1", "VecTypeHint 4", + "ContractionOff", + "LocalSizeHintId %int1"), + Values(SPV_ENV_UNIVERSAL_1_3))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeKernelOnlyBadSpv13, ValidateModeExecution, + Combine( + Values(SPV_ERROR_INVALID_DATA), + Values( + "Execution mode can only be used with the Kernel execution model."), + Values("Geometry", "TessellationControl", "TessellationEvaluation", + "GLCompute", "Vertex", "Fragment"), + Values("LocalSizeHint 1 1 1", "VecTypeHint 4", "ContractionOff", + "LocalSizeHintId %int1"), + Values(SPV_ENV_UNIVERSAL_1_3))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeGLComputeAndKernelGoodSpv13, ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), Values("Kernel", "GLCompute"), + Values("LocalSize 1 1 1", "LocalSizeId %int1 %int1 %int1"), + Values(SPV_ENV_UNIVERSAL_1_3))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeGLComputeAndKernelBadSpv13, ValidateModeExecution, + Combine(Values(SPV_ERROR_INVALID_DATA), + Values("Execution mode can only be used with a Kernel or GLCompute " + "execution model."), + Values("Geometry", "TessellationControl", "TessellationEvaluation", + "Fragment", "Vertex"), + Values("LocalSize 1 1 1", "LocalSizeId %int1 %int1 %int1"), + Values(SPV_ENV_UNIVERSAL_1_3))); + +INSTANTIATE_TEST_CASE_P( + ValidateModeAllGoodSpv13, ValidateModeExecution, + Combine(Values(SPV_SUCCESS), Values(""), + Values("Kernel", "GLCompute", "Geometry", "TessellationControl", + "TessellationEvaluation", "Fragment", "Vertex"), + Values("Xfb", "Initializer", "Finalizer", "SubgroupSize 1", + "SubgroupsPerWorkgroup 1", "SubgroupsPerWorkgroupId %int1"), + Values(SPV_ENV_UNIVERSAL_1_3))); + +TEST_F(ValidateModeExecution, MeshNVLocalSize) { + const std::string spirv = R"( +OpCapability Shader +OpCapability MeshShadingNV +OpExtension "SPV_NV_mesh_shader" +OpMemoryModel Logical GLSL450 +OpEntryPoint MeshNV %main "main" +OpExecutionMode %main LocalSize 1 1 1 +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateModeExecution, TaskNVLocalSize) { + const std::string spirv = R"( +OpCapability Shader +OpCapability MeshShadingNV +OpExtension "SPV_NV_mesh_shader" +OpMemoryModel Logical GLSL450 +OpEntryPoint TaskNV %main "main" +OpExecutionMode %main LocalSize 1 1 1 +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateModeExecution, MeshNVOutputPoints) { + const std::string spirv = R"( +OpCapability Shader +OpCapability MeshShadingNV +OpExtension "SPV_NV_mesh_shader" +OpMemoryModel Logical GLSL450 +OpEntryPoint MeshNV %main "main" +OpExecutionMode %main OutputPoints +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateModeExecution, MeshNVOutputVertices) { + const std::string spirv = R"( +OpCapability Shader +OpCapability MeshShadingNV +OpExtension "SPV_NV_mesh_shader" +OpMemoryModel Logical GLSL450 +OpEntryPoint MeshNV %main "main" +OpExecutionMode %main OutputVertices 42 +)" + kVoidFunction; + + CompileSuccessfully(spirv); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions()); +} + +TEST_F(ValidateModeExecution, MeshNVLocalSizeId) { + const std::string spirv = R"( +OpCapability Shader +OpCapability MeshShadingNV +OpExtension "SPV_NV_mesh_shader" +OpMemoryModel Logical GLSL450 +OpEntryPoint MeshNV %main "main" +OpExecutionModeId %main LocalSizeId %int_1 %int_1 %int_1 +%int = OpTypeInt 32 0 +%int_1 = OpConstant %int 1 +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_UNIVERSAL_1_3; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions(env)); +} + +TEST_F(ValidateModeExecution, TaskNVLocalSizeId) { + const std::string spirv = R"( +OpCapability Shader +OpCapability MeshShadingNV +OpExtension "SPV_NV_mesh_shader" +OpMemoryModel Logical GLSL450 +OpEntryPoint TaskNV %main "main" +OpExecutionModeId %main LocalSizeId %int_1 %int_1 %int_1 +%int = OpTypeInt 32 0 +%int_1 = OpConstant %int 1 +)" + kVoidFunction; + + spv_target_env env = SPV_ENV_UNIVERSAL_1_3; + CompileSuccessfully(spirv, env); + EXPECT_THAT(SPV_SUCCESS, ValidateInstructions(env)); +} + +} // namespace +} // namespace val +} // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_non_uniform_test.cpp b/3rdparty/spirv-tools/test/val/val_non_uniform_test.cpp index 6ff5c127b..a185d8782 100644 --- a/3rdparty/spirv-tools/test/val/val_non_uniform_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_non_uniform_test.cpp @@ -49,14 +49,19 @@ OpCapability GroupNonUniformQuad ss << capabilities_and_extensions; ss << "OpMemoryModel Logical GLSL450\n"; ss << "OpEntryPoint " << execution_model << " %main \"main\"\n"; + if (execution_model == "GLCompute") { + ss << "OpExecutionMode %main LocalSize 1 1 1\n"; + } ss << R"( %void = OpTypeVoid %func = OpTypeFunction %void %bool = OpTypeBool %u32 = OpTypeInt 32 0 +%int = OpTypeInt 32 1 %float = OpTypeFloat 32 %u32vec4 = OpTypeVector %u32 4 +%u32vec3 = OpTypeVector %u32 3 %true = OpConstantTrue %bool %false = OpConstantFalse %bool @@ -66,6 +71,7 @@ OpCapability GroupNonUniformQuad %float_0 = OpConstant %float 0 %u32vec4_null = OpConstantComposite %u32vec4 %u32_0 %u32_0 %u32_0 %u32_0 +%u32vec3_null = OpConstantComposite %u32vec3 %u32_0 %u32_0 %u32_0 %cross_device = OpConstant %u32 0 %device = OpConstant %u32 1 @@ -94,8 +100,8 @@ OpFunctionEnd)"; SpvScope scopes[] = {SpvScopeCrossDevice, SpvScopeDevice, SpvScopeWorkgroup, SpvScopeSubgroup, SpvScopeInvocation}; -using GroupNonUniformScope = spvtest::ValidateBase< - std::tuple>; +using GroupNonUniform = spvtest::ValidateBase< + std::tuple>; std::string ConvertScope(SpvScope scope) { switch (scope) { @@ -114,11 +120,12 @@ std::string ConvertScope(SpvScope scope) { } } -TEST_P(GroupNonUniformScope, Vulkan1p1) { +TEST_P(GroupNonUniform, Vulkan1p1) { std::string opcode = std::get<0>(GetParam()); std::string type = std::get<1>(GetParam()); SpvScope execution_scope = std::get<2>(GetParam()); std::string args = std::get<3>(GetParam()); + std::string error = std::get<4>(GetParam()); std::ostringstream sstr; sstr << "%result = " << opcode << " "; @@ -128,22 +135,28 @@ TEST_P(GroupNonUniformScope, Vulkan1p1) { CompileSuccessfully(GenerateShaderCode(sstr.str()), SPV_ENV_VULKAN_1_1); spv_result_t result = ValidateInstructions(SPV_ENV_VULKAN_1_1); - if (execution_scope == SpvScopeSubgroup) { - EXPECT_EQ(SPV_SUCCESS, result); + if (error == "") { + if (execution_scope == SpvScopeSubgroup) { + EXPECT_EQ(SPV_SUCCESS, result); + } else { + EXPECT_EQ(SPV_ERROR_INVALID_DATA, result); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr( + "in Vulkan environment Execution scope is limited to Subgroup")); + } } else { EXPECT_EQ(SPV_ERROR_INVALID_DATA, result); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr( - "in Vulkan environment Execution scope is limited to Subgroup")); + EXPECT_THAT(getDiagnosticString(), HasSubstr(error)); } } -TEST_P(GroupNonUniformScope, Spirv1p3) { +TEST_P(GroupNonUniform, Spirv1p3) { std::string opcode = std::get<0>(GetParam()); std::string type = std::get<1>(GetParam()); SpvScope execution_scope = std::get<2>(GetParam()); std::string args = std::get<3>(GetParam()); + std::string error = std::get<4>(GetParam()); std::ostringstream sstr; sstr << "%result = " << opcode << " "; @@ -153,99 +166,127 @@ TEST_P(GroupNonUniformScope, Spirv1p3) { CompileSuccessfully(GenerateShaderCode(sstr.str()), SPV_ENV_UNIVERSAL_1_3); spv_result_t result = ValidateInstructions(SPV_ENV_UNIVERSAL_1_3); - if (execution_scope == SpvScopeSubgroup || - execution_scope == SpvScopeWorkgroup) { - EXPECT_EQ(SPV_SUCCESS, result); + if (error == "") { + if (execution_scope == SpvScopeSubgroup || + execution_scope == SpvScopeWorkgroup) { + EXPECT_EQ(SPV_SUCCESS, result); + } else { + EXPECT_EQ(SPV_ERROR_INVALID_DATA, result); + EXPECT_THAT( + getDiagnosticString(), + HasSubstr("Execution scope is limited to Subgroup or Workgroup")); + } } else { EXPECT_EQ(SPV_ERROR_INVALID_DATA, result); - EXPECT_THAT( - getDiagnosticString(), - HasSubstr("Execution scope is limited to Subgroup or Workgroup")); + EXPECT_THAT(getDiagnosticString(), HasSubstr(error)); } } -INSTANTIATE_TEST_CASE_P(GroupNonUniformElect, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformElect, GroupNonUniform, Combine(Values("OpGroupNonUniformElect"), - Values("%bool"), ValuesIn(scopes), Values(""))); + Values("%bool"), ValuesIn(scopes), Values(""), + Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformVote, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformVote, GroupNonUniform, Combine(Values("OpGroupNonUniformAll", "OpGroupNonUniformAny", "OpGroupNonUniformAllEqual"), Values("%bool"), ValuesIn(scopes), - Values("%true"))); + Values("%true"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformBroadcast, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformBroadcast, GroupNonUniform, Combine(Values("OpGroupNonUniformBroadcast"), Values("%bool"), ValuesIn(scopes), - Values("%true %u32_0"))); + Values("%true %u32_0"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformBroadcastFirst, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformBroadcastFirst, GroupNonUniform, Combine(Values("OpGroupNonUniformBroadcastFirst"), Values("%bool"), ValuesIn(scopes), - Values("%true"))); + Values("%true"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformBallot, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformBallot, GroupNonUniform, Combine(Values("OpGroupNonUniformBallot"), Values("%u32vec4"), ValuesIn(scopes), - Values("%true"))); + Values("%true"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformInverseBallot, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformInverseBallot, GroupNonUniform, Combine(Values("OpGroupNonUniformInverseBallot"), Values("%bool"), ValuesIn(scopes), - Values("%u32vec4_null"))); + Values("%u32vec4_null"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotBitExtract, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotBitExtract, GroupNonUniform, Combine(Values("OpGroupNonUniformBallotBitExtract"), Values("%bool"), ValuesIn(scopes), - Values("%u32vec4_null %u32_0"))); + Values("%u32vec4_null %u32_0"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotBitCount, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotBitCount, GroupNonUniform, Combine(Values("OpGroupNonUniformBallotBitCount"), Values("%u32"), ValuesIn(scopes), - Values("Reduce %u32vec4_null"))); + Values("Reduce %u32vec4_null"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotFind, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotFind, GroupNonUniform, Combine(Values("OpGroupNonUniformBallotFindLSB", "OpGroupNonUniformBallotFindMSB"), Values("%u32"), ValuesIn(scopes), - Values("%u32vec4_null"))); + Values("%u32vec4_null"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformShuffle, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformShuffle, GroupNonUniform, Combine(Values("OpGroupNonUniformShuffle", "OpGroupNonUniformShuffleXor", "OpGroupNonUniformShuffleUp", "OpGroupNonUniformShuffleDown"), Values("%u32"), ValuesIn(scopes), - Values("%u32_0 %u32_0"))); + Values("%u32_0 %u32_0"), Values(""))); INSTANTIATE_TEST_CASE_P( - GroupNonUniformIntegerArithmetic, GroupNonUniformScope, + GroupNonUniformIntegerArithmetic, GroupNonUniform, Combine(Values("OpGroupNonUniformIAdd", "OpGroupNonUniformIMul", "OpGroupNonUniformSMin", "OpGroupNonUniformUMin", "OpGroupNonUniformSMax", "OpGroupNonUniformUMax", "OpGroupNonUniformBitwiseAnd", "OpGroupNonUniformBitwiseOr", "OpGroupNonUniformBitwiseXor"), - Values("%u32"), ValuesIn(scopes), Values("Reduce %u32_0"))); + Values("%u32"), ValuesIn(scopes), Values("Reduce %u32_0"), + Values(""))); INSTANTIATE_TEST_CASE_P( - GroupNonUniformFloatArithmetic, GroupNonUniformScope, + GroupNonUniformFloatArithmetic, GroupNonUniform, Combine(Values("OpGroupNonUniformFAdd", "OpGroupNonUniformFMul", "OpGroupNonUniformFMin", "OpGroupNonUniformFMax"), - Values("%float"), ValuesIn(scopes), Values("Reduce %float_0"))); + Values("%float"), ValuesIn(scopes), Values("Reduce %float_0"), + Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformLogicalArithmetic, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformLogicalArithmetic, GroupNonUniform, Combine(Values("OpGroupNonUniformLogicalAnd", "OpGroupNonUniformLogicalOr", "OpGroupNonUniformLogicalXor"), Values("%bool"), ValuesIn(scopes), - Values("Reduce %true"))); + Values("Reduce %true"), Values(""))); -INSTANTIATE_TEST_CASE_P(GroupNonUniformQuad, GroupNonUniformScope, +INSTANTIATE_TEST_CASE_P(GroupNonUniformQuad, GroupNonUniform, Combine(Values("OpGroupNonUniformQuadBroadcast", "OpGroupNonUniformQuadSwap"), Values("%u32"), ValuesIn(scopes), - Values("%u32_0 %u32_0"))); + Values("%u32_0 %u32_0"), Values(""))); + +INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotBitCountScope, GroupNonUniform, + Combine(Values("OpGroupNonUniformBallotBitCount"), + Values("%u32"), ValuesIn(scopes), + Values("Reduce %u32vec4_null"), Values(""))); + +INSTANTIATE_TEST_CASE_P( + GroupNonUniformBallotBitCountBadResultType, GroupNonUniform, + Combine( + Values("OpGroupNonUniformBallotBitCount"), Values("%float", "%int"), + Values(SpvScopeSubgroup), Values("Reduce %u32vec4_null"), + Values("Expected Result Type to be an unsigned integer type scalar."))); + +INSTANTIATE_TEST_CASE_P(GroupNonUniformBallotBitCountBadValue, GroupNonUniform, + Combine(Values("OpGroupNonUniformBallotBitCount"), + Values("%u32"), Values(SpvScopeSubgroup), + Values("Reduce %u32vec3_null", "Reduce %u32_0", + "Reduce %float_0"), + Values("Expected Value to be a vector of four " + "components of integer type scalar"))); } // namespace } // namespace val diff --git a/3rdparty/spirv-tools/test/val/val_primitives_test.cpp b/3rdparty/spirv-tools/test/val/val_primitives_test.cpp index f02ba8057..04d0a4f8a 100644 --- a/3rdparty/spirv-tools/test/val/val_primitives_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_primitives_test.cpp @@ -37,6 +37,10 @@ std::string GenerateShaderCode( ss << capabilities_and_extensions << "\n"; ss << "OpMemoryModel Logical GLSL450\n"; ss << "OpEntryPoint " << execution_model << " %main \"main\"\n"; + if (execution_model == "Geometry") { + ss << "OpExecutionMode %main InputPoints\n"; + ss << "OpExecutionMode %main OutputPoints\n"; + } ss << R"( %void = OpTypeVoid diff --git a/3rdparty/spirv-tools/test/val/val_ssa_test.cpp b/3rdparty/spirv-tools/test/val/val_ssa_test.cpp index 25944f518..5d8fa4b7e 100644 --- a/3rdparty/spirv-tools/test/val/val_ssa_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_ssa_test.cpp @@ -118,7 +118,7 @@ TEST_F(ValidateSSA, DominateUsageWithinBlockBad) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("ID .\\[bad\\] has not been defined\n" + MatchesRegex("ID .\\[%bad\\] has not been defined\n" " %8 = OpIAdd %uint %uint_1 %bad\n")); } @@ -141,7 +141,7 @@ TEST_F(ValidateSSA, DominateUsageSameInstructionBad) { CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("ID .\\[sum\\] has not been defined\n" + MatchesRegex("ID .\\[%sum\\] has not been defined\n" " %sum = OpIAdd %uint %uint_1 %sum\n")); } @@ -202,7 +202,9 @@ TEST_F(ValidateSSA, ForwardMemberNameMissingTargetBad) { )"; CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); - EXPECT_THAT(getDiagnosticString(), HasSubstr("size")); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("The following forward referenced IDs have not been " + "defined:\n2[%2]")); } TEST_F(ValidateSSA, ForwardDecorateGood) { @@ -1124,17 +1126,18 @@ TEST_F(ValidateSSA, IdDoesNotDominateItsUseBad) { ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - MatchesRegex("ID .\\[eleven\\] defined in block .\\[true_block\\] does " - "not dominate its use in block .\\[false_block\\]\n" + MatchesRegex("ID .\\[%eleven\\] defined in block .\\[%true_block\\] " + "does not dominate its use in block .\\[%false_block\\]\n" " %false_block = OpLabel\n")); } TEST_F(ValidateSSA, PhiUseDoesntDominateDefinitionGood) { std::string str = kHeader + kBasicTypes + R"( +%funcintptrt = OpTypePointer Function %uintt %func = OpFunction %voidt None %vfunct %entry = OpLabel -%var_one = OpVariable %intptrt Function %one +%var_one = OpVariable %funcintptrt Function %one %one_val = OpLoad %uintt %var_one OpBranch %loop %loop = OpLabel @@ -1184,7 +1187,7 @@ TEST_F(ValidateSSA, CompileSuccessfully(str); ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT(getDiagnosticString(), - MatchesRegex("ID .\\[inew\\] has not been defined\n" + MatchesRegex("ID .\\[%inew\\] has not been defined\n" " %19 = OpIAdd %uint %inew %uint_1\n")); } @@ -1267,8 +1270,8 @@ TEST_F(ValidateSSA, PhiVariableDefNotDominatedByParentBlockBad) { ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - MatchesRegex("In OpPhi instruction .\\[phi\\], ID .\\[true_copy\\] " - "definition does not dominate its parent .\\[if_false\\]\n" + MatchesRegex("In OpPhi instruction .\\[%phi\\], ID .\\[%true_copy\\] " + "definition does not dominate its parent .\\[%if_false\\]\n" " %phi = OpPhi %bool %true_copy %if_false %false_copy " "%if_true\n")); } @@ -1395,8 +1398,8 @@ TEST_F(ValidateSSA, UseFunctionParameterFromOtherFunctionBad) { ASSERT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions()); EXPECT_THAT( getDiagnosticString(), - MatchesRegex("ID .\\[first\\] used in function .\\[func2\\] is used " - "outside of it's defining function .\\[func\\]\n" + MatchesRegex("ID .\\[%first\\] used in function .\\[%func2\\] is used " + "outside of it's defining function .\\[%func\\]\n" " %func = OpFunction %void None %14\n")); } diff --git a/3rdparty/spirv-tools/test/val/val_state_test.cpp b/3rdparty/spirv-tools/test/val/val_state_test.cpp index 699b224ad..18a4ef99e 100644 --- a/3rdparty/spirv-tools/test/val/val_state_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_state_test.cpp @@ -41,7 +41,7 @@ class ValidationStateTest : public testing::Test { ValidationStateTest() : context_(spvContextCreate(SPV_ENV_UNIVERSAL_1_0)), options_(spvValidatorOptionsCreate()), - state_(context_, options_, kFakeBinary, 0) {} + state_(context_, options_, kFakeBinary, 0, 1) {} ~ValidationStateTest() { spvContextDestroy(context_); diff --git a/3rdparty/spirv-tools/test/val/val_storage_test.cpp b/3rdparty/spirv-tools/test/val/val_storage_test.cpp index 46b3ddcbb..aa1eecda8 100644 --- a/3rdparty/spirv-tools/test/val/val_storage_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_storage_test.cpp @@ -73,29 +73,38 @@ TEST_F(ValidateStorage, FunctionStorageOutsideFunction) { TEST_F(ValidateStorage, OtherStorageOutsideFunction) { char str[] = R"( - OpCapability Shader - OpCapability Kernel - OpCapability AtomicStorage - OpCapability Linkage - OpMemoryModel Logical GLSL450 -%intt = OpTypeInt 32 0 -%voidt = OpTypeVoid -%vfunct = OpTypeFunction %voidt -%ptrt = OpTypePointer Function %intt -%unicon = OpVariable %ptrt UniformConstant -%input = OpVariable %ptrt Input -%unif = OpVariable %ptrt Uniform -%output = OpVariable %ptrt Output -%wgroup = OpVariable %ptrt Workgroup -%xwgrp = OpVariable %ptrt CrossWorkgroup -%priv = OpVariable %ptrt Private -%pushco = OpVariable %ptrt PushConstant -%atomct = OpVariable %ptrt AtomicCounter -%image = OpVariable %ptrt Image -%func = OpFunction %voidt None %vfunct -%funcl = OpLabel - OpReturn - OpFunctionEnd + OpCapability Shader + OpCapability Kernel + OpCapability AtomicStorage + OpCapability Linkage + OpMemoryModel Logical GLSL450 +%intt = OpTypeInt 32 0 +%voidt = OpTypeVoid +%vfunct = OpTypeFunction %voidt +%uniconptrt = OpTypePointer UniformConstant %intt +%unicon = OpVariable %uniconptrt UniformConstant +%inputptrt = OpTypePointer Input %intt +%input = OpVariable %inputptrt Input +%unifptrt = OpTypePointer Uniform %intt +%unif = OpVariable %unifptrt Uniform +%outputptrt = OpTypePointer Output %intt +%output = OpVariable %outputptrt Output +%wgroupptrt = OpTypePointer Workgroup %intt +%wgroup = OpVariable %wgroupptrt Workgroup +%xwgrpptrt = OpTypePointer CrossWorkgroup %intt +%xwgrp = OpVariable %xwgrpptrt CrossWorkgroup +%privptrt = OpTypePointer Private %intt +%priv = OpVariable %privptrt Private +%pushcoptrt = OpTypePointer PushConstant %intt +%pushco = OpVariable %pushcoptrt PushConstant +%atomcptrt = OpTypePointer AtomicCounter %intt +%atomct = OpVariable %atomcptrt AtomicCounter +%imageptrt = OpTypePointer Image %intt +%image = OpVariable %imageptrt Image +%func = OpFunction %voidt None %vfunct +%funcl = OpLabel + OpReturn + OpFunctionEnd )"; CompileSuccessfully(str); diff --git a/3rdparty/spirv-tools/test/val/val_validation_state_test.cpp b/3rdparty/spirv-tools/test/val/val_validation_state_test.cpp index 68504c528..e010fe9f2 100644 --- a/3rdparty/spirv-tools/test/val/val_validation_state_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_validation_state_test.cpp @@ -29,11 +29,17 @@ using ::testing::HasSubstr; using ValidationStateTest = spvtest::ValidateBase; -const char header[] = +const char kHeader[] = " OpCapability Shader" " OpCapability Linkage" " OpMemoryModel Logical GLSL450 "; +const char kVulkanMemoryHeader[] = + " OpCapability Shader" + " OpCapability VulkanMemoryModelKHR" + " OpExtension \"SPV_KHR_vulkan_memory_model\"" + " OpMemoryModel Logical VulkanKHR "; + const char kVoidFVoid[] = " %void = OpTypeVoid" " %void_f = OpTypeFunction %void" @@ -42,9 +48,79 @@ const char kVoidFVoid[] = " OpReturn" " OpFunctionEnd "; +// k*RecursiveBody examples originally from test/opt/function_test.cpp +const char* kNonRecursiveBody = R"( +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%12 = OpFunction %_struct_6 None %7 +%13 = OpLabel +OpUnreachable +OpFunctionEnd +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %12 +OpUnreachable +OpFunctionEnd +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +)"; + +const char* kDirectlyRecursiveBody = R"( +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +)"; + +const char* kIndirectlyRecursiveBody = R"( +OpEntryPoint Fragment %1 "main" +OpExecutionMode %1 OriginUpperLeft +%void = OpTypeVoid +%4 = OpTypeFunction %void +%float = OpTypeFloat 32 +%_struct_6 = OpTypeStruct %float %float +%7 = OpTypeFunction %_struct_6 +%9 = OpFunction %_struct_6 None %7 +%10 = OpLabel +%11 = OpFunctionCall %_struct_6 %12 +OpUnreachable +OpFunctionEnd +%12 = OpFunction %_struct_6 None %7 +%13 = OpLabel +%14 = OpFunctionCall %_struct_6 %9 +OpUnreachable +OpFunctionEnd +%1 = OpFunction %void Pure|Const %4 +%8 = OpLabel +%2 = OpFunctionCall %_struct_6 %9 +OpKill +OpFunctionEnd +)"; + // Tests that the instruction count in ValidationState is correct. TEST_F(ValidationStateTest, CheckNumInstructions) { - std::string spirv = std::string(header) + "%int = OpTypeInt 32 0"; + std::string spirv = std::string(kHeader) + "%int = OpTypeInt 32 0"; CompileSuccessfully(spirv); EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); EXPECT_EQ(size_t(4), vstate_->ordered_instructions().size()); @@ -52,7 +128,7 @@ TEST_F(ValidationStateTest, CheckNumInstructions) { // Tests that the number of global variables in ValidationState is correct. TEST_F(ValidationStateTest, CheckNumGlobalVars) { - std::string spirv = std::string(header) + R"( + std::string spirv = std::string(kHeader) + R"( %int = OpTypeInt 32 0 %_ptr_int = OpTypePointer Input %int %var_1 = OpVariable %_ptr_int Input @@ -65,7 +141,7 @@ TEST_F(ValidationStateTest, CheckNumGlobalVars) { // Tests that the number of local variables in ValidationState is correct. TEST_F(ValidationStateTest, CheckNumLocalVars) { - std::string spirv = std::string(header) + R"( + std::string spirv = std::string(kHeader) + R"( %int = OpTypeInt 32 0 %_ptr_int = OpTypePointer Function %int %voidt = OpTypeVoid @@ -85,7 +161,7 @@ TEST_F(ValidationStateTest, CheckNumLocalVars) { // Tests that the "id bound" in ValidationState is correct. TEST_F(ValidationStateTest, CheckIdBound) { - std::string spirv = std::string(header) + R"( + std::string spirv = std::string(kHeader) + R"( %int = OpTypeInt 32 0 %voidt = OpTypeVoid )"; @@ -96,7 +172,7 @@ TEST_F(ValidationStateTest, CheckIdBound) { // Tests that the entry_points in ValidationState is correct. TEST_F(ValidationStateTest, CheckEntryPoints) { - std::string spirv = std::string(header) + + std::string spirv = std::string(kHeader) + " OpEntryPoint Vertex %func \"shader\"" + std::string(kVoidFVoid); CompileSuccessfully(spirv); @@ -154,6 +230,82 @@ TEST_F(ValidationStateTest, CheckAccessChainIndexesLimitOption) { EXPECT_EQ(100u, options_->universal_limits_.max_access_chain_indexes); } +TEST_F(ValidationStateTest, CheckNonRecursiveBodyGood) { + std::string spirv = std::string(kHeader) + kNonRecursiveBody; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidationStateTest, CheckVulkanNonRecursiveBodyGood) { + std::string spirv = std::string(kVulkanMemoryHeader) + kNonRecursiveBody; + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_SUCCESS, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); +} + +TEST_F(ValidationStateTest, CheckWebGPUNonRecursiveBodyGood) { + std::string spirv = std::string(kVulkanMemoryHeader) + kNonRecursiveBody; + CompileSuccessfully(spirv, SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidationStateTest, CheckDirectlyRecursiveBodyGood) { + std::string spirv = std::string(kHeader) + kDirectlyRecursiveBody; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidationStateTest, CheckVulkanDirectlyRecursiveBodyBad) { + std::string spirv = std::string(kVulkanMemoryHeader) + kDirectlyRecursiveBody; + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Entry points may not have a call graph with cycles.\n " + " %1 = OpFunction %void Pure|Const %3\n")); +} + +TEST_F(ValidationStateTest, CheckWebGPUDirectlyRecursiveBodyBad) { + std::string spirv = std::string(kVulkanMemoryHeader) + kDirectlyRecursiveBody; + CompileSuccessfully(spirv, SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, + ValidateAndRetrieveValidationState(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Entry points may not have a call graph with cycles.\n " + " %1 = OpFunction %void Pure|Const %3\n")); +} + +TEST_F(ValidationStateTest, CheckIndirectlyRecursiveBodyGood) { + std::string spirv = std::string(kHeader) + kIndirectlyRecursiveBody; + CompileSuccessfully(spirv); + EXPECT_EQ(SPV_SUCCESS, ValidateAndRetrieveValidationState()); +} + +TEST_F(ValidationStateTest, CheckVulkanIndirectlyRecursiveBodyBad) { + std::string spirv = + std::string(kVulkanMemoryHeader) + kIndirectlyRecursiveBody; + CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_1); + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, + ValidateAndRetrieveValidationState(SPV_ENV_VULKAN_1_1)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Entry points may not have a call graph with cycles.\n " + " %1 = OpFunction %void Pure|Const %3\n")); +} + +// Indirectly recursive functions are caught by the function definition layout +// rules, because they cause a situation where there are 2 functions that have +// to be before each other, and layout is checked earlier. +TEST_F(ValidationStateTest, CheckWebGPUIndirectlyRecursiveBodyBad) { + std::string spirv = + std::string(kVulkanMemoryHeader) + kIndirectlyRecursiveBody; + CompileSuccessfully(spirv, SPV_ENV_WEBGPU_0); + EXPECT_EQ(SPV_ERROR_INVALID_LAYOUT, + ValidateAndRetrieveValidationState(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("For WebGPU, functions need to be defined before being " + "called.\n %9 = OpFunctionCall %_struct_5 %10\n")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/test/val/val_version_test.cpp b/3rdparty/spirv-tools/test/val/val_version_test.cpp index fa252ac86..eb9bbb960 100644 --- a/3rdparty/spirv-tools/test/val/val_version_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_version_test.cpp @@ -31,6 +31,22 @@ const std::string vulkan_spirv = R"( OpCapability Shader OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft +%void = OpTypeVoid +%functy = OpTypeFunction %void +%func = OpFunction %void None %functy +%1 = OpLabel +OpReturn +OpFunctionEnd +)"; + +const std::string webgpu_spirv = R"( +OpCapability Shader +OpCapability VulkanMemoryModelKHR +OpExtension "SPV_KHR_vulkan_memory_model" +OpMemoryModel Logical VulkanKHR +OpEntryPoint Fragment %func "func" +OpExecutionMode %func OriginUpperLeft %void = OpTypeVoid %functy = OpTypeFunction %void %func = OpFunction %void None %functy @@ -106,7 +122,7 @@ INSTANTIATE_TEST_CASE_P(Universal, ValidateVersion, std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_2, vulkan_spirv, true), std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_3, vulkan_spirv, true), std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_5, vulkan_spirv, true), - std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_WEBGPU_0, vulkan_spirv, true), + std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_WEBGPU_0, webgpu_spirv, true), std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, true), @@ -119,7 +135,7 @@ INSTANTIATE_TEST_CASE_P(Universal, ValidateVersion, std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_2, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_3, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_5, vulkan_spirv, false), - std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_WEBGPU_0, vulkan_spirv, true), + std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_WEBGPU_0, webgpu_spirv, true), std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false), @@ -132,7 +148,7 @@ INSTANTIATE_TEST_CASE_P(Universal, ValidateVersion, std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_2, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_3, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_5, vulkan_spirv, false), - std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_WEBGPU_0, vulkan_spirv, true), + std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_WEBGPU_0, webgpu_spirv, true), std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false), @@ -145,7 +161,7 @@ INSTANTIATE_TEST_CASE_P(Universal, ValidateVersion, std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_2, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_3, vulkan_spirv, false), std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_5, vulkan_spirv, false), - std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_WEBGPU_0, vulkan_spirv, true) + std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_WEBGPU_0, webgpu_spirv, true) ) ); diff --git a/3rdparty/spirv-tools/test/val/val_webgpu_test.cpp b/3rdparty/spirv-tools/test/val/val_webgpu_test.cpp index b65d08fe6..48ea21db2 100644 --- a/3rdparty/spirv-tools/test/val/val_webgpu_test.cpp +++ b/3rdparty/spirv-tools/test/val/val_webgpu_test.cpp @@ -29,11 +29,19 @@ using ValidateWebGPU = spvtest::ValidateBase; TEST_F(ValidateWebGPU, OpUndefIsDisallowed) { std::string spirv = R"( - OpCapability Shader - OpCapability Linkage - OpMemoryModel Logical GLSL450 - %float = OpTypeFloat 32 - %1 = OpUndef %float + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpEntryPoint Vertex %func "shader" +%float = OpTypeFloat 32 +%1 = OpUndef %float +%void = OpTypeVoid +%void_f = OpTypeFunction %void +%func = OpFunction %void None %void_f +%label = OpLabel + OpReturn + OpFunctionEnd )"; CompileSuccessfully(spirv); @@ -46,6 +54,228 @@ TEST_F(ValidateWebGPU, OpUndefIsDisallowed) { EXPECT_THAT(getDiagnosticString(), HasSubstr("OpUndef is disallowed")); } +TEST_F(ValidateWebGPU, OpNameIsDisallowed) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpName %1 "foo" +%1 = OpTypeFloat 32 +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Debugging instructions are not allowed in the WebGPU " + "execution environment.\n OpName %foo \"foo\"\n")); +} + +TEST_F(ValidateWebGPU, OpMemberNameIsDisallowed) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpMemberName %2 0 "foo" +%1 = OpTypeFloat 32 +%2 = OpTypeStruct %1 +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Debugging instructions are not allowed in the WebGPU " + "execution environment.\n OpMemberName %_struct_1 0 " + "\"foo\"\n")); +} + +TEST_F(ValidateWebGPU, OpSourceIsDisallowed) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpSource GLSL 450 +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Debugging instructions are not allowed in the WebGPU " + "execution environment.\n OpSource GLSL 450\n")); +} + +// OpSourceContinued does not have a test case, because it requires being +// preceded by OpSource, which will cause a validation error. + +TEST_F(ValidateWebGPU, OpSourceExtensionIsDisallowed) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpSourceExtension "bar" +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Debugging instructions are not allowed in the WebGPU " + "execution environment.\n OpSourceExtension " + "\"bar\"\n")); +} + +TEST_F(ValidateWebGPU, OpStringIsDisallowed) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR +%1 = OpString "foo" +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Debugging instructions are not allowed in the WebGPU " + "execution environment.\n %1 = OpString \"foo\"\n")); +} + +// OpLine does not have a test case, because it requires being preceded by +// OpString, which will cause a validation error. + +TEST_F(ValidateWebGPU, OpNoLineDisallowed) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpNoLine +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_BINARY, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Debugging instructions are not allowed in the WebGPU " + "execution environment.\n OpNoLine\n")); +} + +TEST_F(ValidateWebGPU, LogicalAddressingVulkanKHRMemoryGood) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR + OpEntryPoint Vertex %func "shader" +%void = OpTypeVoid +%void_f = OpTypeFunction %void +%func = OpFunction %void None %void_f +%label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateWebGPU, NonLogicalAddressingModelBad) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Physical32 VulkanKHR +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Addressing model must be Logical for WebGPU " + "environment.\n OpMemoryModel Physical32 " + "VulkanKHR\n")); +} + +TEST_F(ValidateWebGPU, NonVulkanKHRMemoryModelBad) { + std::string spirv = R"( + OpCapability Shader + OpMemoryModel Logical GLSL450 + OpNoLine +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("Memory model must be VulkanKHR for WebGPU " + "environment.\n OpMemoryModel Logical GLSL450\n")); +} + +TEST_F(ValidateWebGPU, WhitelistedExtendedInstructionsImportGood) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" +%1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical VulkanKHR + OpEntryPoint Vertex %func "shader" +%void = OpTypeVoid +%void_f = OpTypeFunction %void +%func = OpFunction %void None %void_f +%label = OpLabel + OpReturn + OpFunctionEnd +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_SUCCESS, ValidateInstructions(SPV_ENV_WEBGPU_0)); +} + +TEST_F(ValidateWebGPU, NonWhitelistedExtendedInstructionsImportBad) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_vulkan_memory_model" +%1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Logical VulkanKHR +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("For WebGPU, the only valid parameter to " + "OpExtInstImport is \"GLSL.std.450\".\n %1 = " + "OpExtInstImport \"OpenCL.std\"\n")); +} + +TEST_F(ValidateWebGPU, NonVulkanKHRMemoryModelExtensionBad) { + std::string spirv = R"( + OpCapability Shader + OpCapability VulkanMemoryModelKHR + OpExtension "SPV_KHR_8bit_storage" + OpExtension "SPV_KHR_vulkan_memory_model" + OpMemoryModel Logical VulkanKHR +)"; + + CompileSuccessfully(spirv); + + EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_WEBGPU_0)); + EXPECT_THAT(getDiagnosticString(), + HasSubstr("For WebGPU, the only valid parameter to OpExtension " + "is \"SPV_KHR_vulkan_memory_model\".\n OpExtension " + "\"SPV_KHR_8bit_storage\"\n")); +} + } // namespace } // namespace val } // namespace spvtools diff --git a/3rdparty/spirv-tools/tools/CMakeLists.txt b/3rdparty/spirv-tools/tools/CMakeLists.txt index 67143d879..9fb3a91a0 100644 --- a/3rdparty/spirv-tools/tools/CMakeLists.txt +++ b/3rdparty/spirv-tools/tools/CMakeLists.txt @@ -42,6 +42,7 @@ if (NOT ${SPIRV_SKIP_EXECUTABLES}) add_spvtools_tool(TARGET spirv-dis SRCS dis/dis.cpp LIBS ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-val SRCS val/val.cpp util/cli_consumer.cpp LIBS ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-opt SRCS opt/opt.cpp util/cli_consumer.cpp LIBS SPIRV-Tools-opt ${SPIRV_TOOLS}) + add_spvtools_tool(TARGET spirv-reduce SRCS reduce/reduce.cpp util/cli_consumer.cpp LIBS SPIRV-Tools-reduce ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-link SRCS link/linker.cpp LIBS SPIRV-Tools-link ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-stats SRCS stats/stats.cpp @@ -61,7 +62,7 @@ if (NOT ${SPIRV_SKIP_EXECUTABLES}) ${SPIRV_HEADER_INCLUDE_DIR}) set(SPIRV_INSTALL_TARGETS spirv-as spirv-dis spirv-val spirv-opt spirv-stats - spirv-cfg spirv-link) + spirv-cfg spirv-link spirv-reduce) if(SPIRV_BUILD_COMPRESSION) add_spvtools_tool(TARGET spirv-markv diff --git a/3rdparty/spirv-tools/tools/lesspipe/spirv-lesspipe.sh b/3rdparty/spirv-tools/tools/lesspipe/spirv-lesspipe.sh index 81e335501..57684a201 100644 --- a/3rdparty/spirv-tools/tools/lesspipe/spirv-lesspipe.sh +++ b/3rdparty/spirv-tools/tools/lesspipe/spirv-lesspipe.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env sh # Copyright (c) 2016 The Khronos Group Inc. # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/3rdparty/spirv-tools/tools/opt/opt.cpp b/3rdparty/spirv-tools/tools/opt/opt.cpp index fcd260e45..db056b1c3 100644 --- a/3rdparty/spirv-tools/tools/opt/opt.cpp +++ b/3rdparty/spirv-tools/tools/opt/opt.cpp @@ -23,9 +23,9 @@ #include #include "source/opt/log.h" -#include "source/opt/loop_peeling.h" -#include "source/opt/set_spec_constant_default_value_pass.h" -#include "source/spirv_validator_options.h" +#include "source/spirv_target_env.h" +#include "source/util/string_utils.h" +#include "spirv-tools/libspirv.hpp" #include "spirv-tools/optimizer.hpp" #include "tools/io.h" #include "tools/util/cli_consumer.h" @@ -79,6 +79,12 @@ std::string GetSizePasses() { return GetListOfPassesAsString(optimizer); } +std::string GetWebGPUPasses() { + spvtools::Optimizer optimizer(SPV_ENV_WEBGPU_0); + optimizer.RegisterWebGPUPasses(); + return GetListOfPassesAsString(optimizer); +} + void PrintUsage(const char* program) { // NOTE: Please maintain flags in lexicographical order. printf( @@ -190,9 +196,9 @@ Options (in lexicographical order): Looks for instructions in the same basic block that compute the same value, and deletes the redundant ones. --loop-fission - Splits any top level loops in which the register pressure has exceeded - a given threshold. The threshold must follow the use of this flag and - must be a positive integer value. + Splits any top level loops in which the register pressure has + exceeded a given threshold. The threshold must follow the use of + this flag and must be a positive integer value. --loop-fusion Identifies adjacent loops with the same lower and upper bound. If this is legal, then merge the loops into a single loop. @@ -200,6 +206,9 @@ Options (in lexicographical order): registers too much, while reducing the number of loads from memory. Takes an additional positive integer argument to set the maximum number of registers. + --loop-invariant-code-motion + Identifies code in loops that has the same value for every + iteration of the loop, and move it to the loop pre-header. --loop-unroll Fully unrolls loops marked with the Unroll flag --loop-unroll-partial @@ -214,6 +223,10 @@ Options (in lexicographical order): growth threshold. The threshold prevents the loop peeling from happening if the code size increase created by the optimization is above the threshold. + --max-id-bound= + Sets the maximum value for the id bound for the moudle. The + default is the minimum value for this limit, 0x3FFFFF. See + section 2.17 of the Spir-V specification. --merge-blocks Join two blocks into a single block if the second has the first as its only predecessor. Performed only on entry point @@ -332,6 +345,11 @@ Options (in lexicographical order): --strip-reflect Remove all reflection information. For now, this covers reflection information defined by SPV_GOOGLE_hlsl_functionality1. + --target-env= + Set the target environment. Without this flag the target + enviroment defaults to spv1.3. + must be one of vulkan1.0, vulkan1.1, opencl2.2, spv1.0, + spv1.1, spv1.2, spv1.3, or webgpu0. --time-report Print the resource utilization of each pass (e.g., CPU time, RSS) to standard error output. Currently it supports only Unix @@ -339,10 +357,25 @@ Options (in lexicographical order): prints CPU/WALL/USR/SYS time (and RSS if possible), but note that USR/SYS time are returned by getrusage() and can have a small error. + --upgrade-memory-model + Upgrades the Logical GLSL450 memory model to Logical VulkanKHR. + Transforms memory, image, atomic and barrier operations to conform + to that model's requirements. --vector-dce This pass looks for components of vectors that are unused, and removes them from the vector. Note this would still leave around lots of dead code that a pass of ADCE will be able to remove. + --webgpu-mode + Turns on the prescribed passes for WebGPU and sets the target + environmet to webgpu0. Other passes may be turned on via + additional flags, but such combinations are not tested. + Using --target-env with this flag is not allowed. + + This flag is the equivalent of passing in --target-env=webgpu0 + and specifying the following optimization code names: + %s + + NOTE: This flag is a WIP and its behaviour is subject to change. --workaround-1209 Rewrites instructions for which there are known driver bugs to avoid triggering those bugs. @@ -355,7 +388,8 @@ Options (in lexicographical order): Display optimizer version information. )", program, program, GetLegalizationPasses().c_str(), - GetOptimizationPasses().c_str(), GetSizePasses().c_str()); + GetOptimizationPasses().c_str(), GetSizePasses().c_str(), + GetWebGPUPasses().c_str()); } // Reads command-line flags the file specified in |oconfig_flag|. This string @@ -406,18 +440,22 @@ bool ReadFlagsFromFile(const char* oconfig_flag, OptStatus ParseFlags(int argc, const char** argv, spvtools::Optimizer* optimizer, const char** in_file, - const char** out_file, spvtools::ValidatorOptions* options, - bool* skip_validator); + const char** out_file, + spvtools::ValidatorOptions* validator_options, + spvtools::OptimizerOptions* optimizer_options); // Parses and handles the -Oconfig flag. |prog_name| contains the name of // the spirv-opt binary (used to build a new argv vector for the recursive // invocation to ParseFlags). |opt_flag| contains the -Oconfig=FILENAME flag. -// |optimizer|, |in_file| and |out_file| are as in ParseFlags. +// |optimizer|, |in_file|, |out_file|, |validator_options|, and +// |optimizer_options| are as in ParseFlags. // // This returns the same OptStatus instance returned by ParseFlags. OptStatus ParseOconfigFlag(const char* prog_name, const char* opt_flag, spvtools::Optimizer* optimizer, const char** in_file, - const char** out_file) { + const char** out_file, + spvtools::ValidatorOptions* validator_options, + spvtools::OptimizerOptions* optimizer_options) { std::vector flags; flags.push_back(prog_name); @@ -440,9 +478,8 @@ OptStatus ParseOconfigFlag(const char* prog_name, const char* opt_flag, new_argv[i] = flags[i].c_str(); } - bool skip_validator = false; return ParseFlags(static_cast(flags.size()), new_argv, optimizer, - in_file, out_file, nullptr, &skip_validator); + in_file, out_file, validator_options, optimizer_options); } // Canonicalize the flag in |argv[argi]| of the form '--pass arg' into @@ -485,9 +522,9 @@ std::string CanonicalizeFlag(const char** argv, int argc, int* argi) { return canonical_arg.str(); } -// the number of command-line flags. |argv| points to an array of strings -// holding the flags. |optimizer| is the Optimizer instance used to optimize the -// program. +// Parses command-line flags. |argc| contains the number of command-line flags. +// |argv| points to an array of strings holding the flags. |optimizer| is the +// Optimizer instance used to optimize the program. // // On return, this function stores the name of the input program in |in_file|. // The name of the output file in |out_file|. The return value indicates whether @@ -495,9 +532,12 @@ std::string CanonicalizeFlag(const char** argv, int argc, int* argi) { // success. OptStatus ParseFlags(int argc, const char** argv, spvtools::Optimizer* optimizer, const char** in_file, - const char** out_file, spvtools::ValidatorOptions* options, - bool* skip_validator) { + const char** out_file, + spvtools::ValidatorOptions* validator_options, + spvtools::OptimizerOptions* optimizer_options) { std::vector pass_flags; + bool target_env_set = false; + bool webgpu_mode_set = false; for (int argi = 1; argi < argc; ++argi) { const char* cur_arg = argv[argi]; if ('-' == cur_arg[0]) { @@ -526,18 +566,63 @@ OptStatus ParseFlags(int argc, const char** argv, } } else if (0 == strncmp(cur_arg, "-Oconfig=", sizeof("-Oconfig=") - 1)) { OptStatus status = - ParseOconfigFlag(argv[0], cur_arg, optimizer, in_file, out_file); + ParseOconfigFlag(argv[0], cur_arg, optimizer, in_file, out_file, + validator_options, optimizer_options); if (status.action != OPT_CONTINUE) { return status; } } else if (0 == strcmp(cur_arg, "--skip-validation")) { - *skip_validator = true; + optimizer_options->set_run_validator(false); } else if (0 == strcmp(cur_arg, "--print-all")) { optimizer->SetPrintAll(&std::cerr); } else if (0 == strcmp(cur_arg, "--time-report")) { optimizer->SetTimeReport(&std::cerr); } else if (0 == strcmp(cur_arg, "--relax-struct-store")) { - options->SetRelaxStructStore(true); + validator_options->SetRelaxStructStore(true); + } else if (0 == strncmp(cur_arg, "--max-id-bound=", + sizeof("--max-id-bound=") - 1)) { + auto split_flag = spvtools::utils::SplitFlagArgs(cur_arg); + // Will not allow values in the range [2^31,2^32). + uint32_t max_id_bound = + static_cast(atoi(split_flag.second.c_str())); + + // That SPIR-V mandates the minimum value for max id bound but + // implementations may allow higher minimum bounds. + if (max_id_bound < kDefaultMaxIdBound) { + spvtools::Error(opt_diagnostic, nullptr, {}, + "The max id bound must be at least 0x3FFFFF"); + return {OPT_STOP, 1}; + } + optimizer_options->set_max_id_bound(max_id_bound); + validator_options->SetUniversalLimit(spv_validator_limit_max_id_bound, + max_id_bound); + } else if (0 == strncmp(cur_arg, + "--target-env=", sizeof("--target-env=") - 1)) { + if (webgpu_mode_set) { + spvtools::Error(opt_diagnostic, nullptr, {}, + "Cannot use both --webgpu-mode and --target-env at " + "the same time"); + return {OPT_STOP, 1}; + } + const auto split_flag = spvtools::utils::SplitFlagArgs(cur_arg); + const auto target_env_str = split_flag.second.c_str(); + spv_target_env target_env; + if (!spvParseTargetEnv(target_env_str, &target_env)) { + spvtools::Error(opt_diagnostic, nullptr, {}, + "Invalid value passed to --target-env"); + return {OPT_STOP, 1}; + } + optimizer->SetTargetEnv(target_env); + } else if (0 == strcmp(cur_arg, "--webgpu-mode")) { + if (target_env_set) { + spvtools::Error(opt_diagnostic, nullptr, {}, + "Cannot use both --webgpu-mode and --target-env at " + "the same time"); + return {OPT_STOP, 1}; + } + + optimizer->SetTargetEnv(SPV_ENV_WEBGPU_0); + optimizer->RegisterWebGPUPasses(); } else { // Some passes used to accept the form '--pass arg', canonicalize them // to '--pass=arg'. @@ -546,7 +631,7 @@ OptStatus ParseFlags(int argc, const char** argv, // If we were requested to legalize SPIR-V generated from the HLSL // front-end, skip validation. if (0 == strcmp(cur_arg, "--legalize-hlsl")) { - options->SetRelaxLogicalPointer(true); + validator_options->SetRelaxLogicalPointer(true); } } } else { @@ -572,16 +657,18 @@ OptStatus ParseFlags(int argc, const char** argv, int main(int argc, const char** argv) { const char* in_file = nullptr; const char* out_file = nullptr; - bool skip_validator = false; spv_target_env target_env = kDefaultEnvironment; - spvtools::ValidatorOptions options; + spvtools::Optimizer optimizer(target_env); optimizer.SetMessageConsumer(spvtools::utils::CLIMessageConsumer); + spvtools::ValidatorOptions validator_options; + spvtools::OptimizerOptions optimizer_options; OptStatus status = ParseFlags(argc, argv, &optimizer, &in_file, &out_file, - &options, &skip_validator); + &validator_options, &optimizer_options); + optimizer_options.set_validator_options(validator_options); if (status.action == OPT_STOP) { return status.code; @@ -599,8 +686,8 @@ int main(int argc, const char** argv) { // By using the same vector as input and output, we save time in the case // that there was no change. - bool ok = optimizer.Run(binary.data(), binary.size(), &binary, options, - skip_validator); + bool ok = + optimizer.Run(binary.data(), binary.size(), &binary, optimizer_options); if (!WriteFile(out_file, "wb", binary.data(), binary.size())) { return 1; diff --git a/3rdparty/spirv-tools/tools/reduce/reduce.cpp b/3rdparty/spirv-tools/tools/reduce/reduce.cpp new file mode 100644 index 000000000..65325f745 --- /dev/null +++ b/3rdparty/spirv-tools/tools/reduce/reduce.cpp @@ -0,0 +1,242 @@ +// Copyright (c) 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include + +#include "source/opt/build_module.h" +#include "source/opt/ir_context.h" +#include "source/opt/log.h" +#include "source/reduce/operand_to_const_reduction_pass.h" +#include "source/reduce/operand_to_dominating_id_reduction_pass.h" +#include "source/reduce/operand_to_undef_reduction_pass.h" +#include "source/reduce/reducer.h" +#include "source/reduce/remove_opname_instruction_reduction_pass.h" +#include "source/reduce/remove_unreferenced_instruction_reduction_pass.h" +#include "source/reduce/structured_loop_to_selection_reduction_pass.h" +#include "source/spirv_reducer_options.h" +#include "source/util/make_unique.h" +#include "source/util/string_utils.h" +#include "spirv-tools/libspirv.hpp" +#include "tools/io.h" +#include "tools/util/cli_consumer.h" + +using namespace spvtools::reduce; + +namespace { + +using ErrorOrInt = std::pair; + +// Check that the std::system function can actually be used. +bool CheckExecuteCommand() { + int res = std::system(nullptr); + return res != 0; +} + +// Execute a command using the shell. +// Returns true if and only if the command's exit status was 0. +bool ExecuteCommand(const std::string& command) { + errno = 0; + int status = std::system(command.c_str()); + assert(errno == 0 && "failed to execute command"); + // The result returned by 'system' is implementation-defined, but is + // usually the case that the returned value is 0 when the command's exit + // code was 0. We are assuming that here, and that's all we depend on. + return status == 0; +} + +// Status and actions to perform after parsing command-line arguments. +enum ReduceActions { REDUCE_CONTINUE, REDUCE_STOP }; + +struct ReduceStatus { + ReduceActions action; + int code; +}; + +void PrintUsage(const char* program) { + // NOTE: Please maintain flags in lexicographical order. + printf( + R"(%s - Reduce a SPIR-V binary file with respect to a user-provided + interestingness test. + +USAGE: %s [options] + +The SPIR-V binary is read from . + +Whether a binary is interesting is determined by , which +is typically a script. + +NOTE: The reducer is a work in progress. + +Options (in lexicographical order): + -h, --help + Print this help. + --step-limit + 32-bit unsigned integer specifying maximum number of + steps the reducer will take before giving up. + --version + Display reducer version information. +)", + program, program); +} + +// Message consumer for this tool. Used to emit diagnostics during +// initialization and setup. Note that |source| and |position| are irrelevant +// here because we are still not processing a SPIR-V input file. +void ReduceDiagnostic(spv_message_level_t level, const char* /*source*/, + const spv_position_t& /*position*/, const char* message) { + if (level == SPV_MSG_ERROR) { + fprintf(stderr, "error: "); + } + fprintf(stderr, "%s\n", message); +} + +ReduceStatus ParseFlags(int argc, const char** argv, const char** in_file, + const char** interestingness_test, + spvtools::ReducerOptions* reducer_options) { + uint32_t positional_arg_index = 0; + + for (int argi = 1; argi < argc; ++argi) { + const char* cur_arg = argv[argi]; + if ('-' == cur_arg[0]) { + if (0 == strcmp(cur_arg, "--version")) { + spvtools::Logf(ReduceDiagnostic, SPV_MSG_INFO, nullptr, {}, "%s\n", + spvSoftwareVersionDetailsString()); + return {REDUCE_STOP, 0}; + } else if (0 == strcmp(cur_arg, "--help") || 0 == strcmp(cur_arg, "-h")) { + PrintUsage(argv[0]); + return {REDUCE_STOP, 0}; + } else if ('\0' == cur_arg[1]) { + // We do not support reduction from standard input. We could support + // this if there was a compelling use case. + PrintUsage(argv[0]); + return {REDUCE_STOP, 0}; + } else if (0 == strncmp(cur_arg, + "--step-limit=", sizeof("--step-limit=") - 1)) { + const auto split_flag = spvtools::utils::SplitFlagArgs(cur_arg); + char* end = nullptr; + errno = 0; + const auto step_limit = + static_cast(strtol(split_flag.second.c_str(), &end, 10)); + assert(end != split_flag.second.c_str() && errno == 0); + reducer_options->set_step_limit(step_limit); + } + } else if (positional_arg_index == 0) { + // Input file name + assert(!*in_file); + *in_file = cur_arg; + positional_arg_index++; + } else if (positional_arg_index == 1) { + assert(!*interestingness_test); + *interestingness_test = cur_arg; + positional_arg_index++; + } else { + spvtools::Error(ReduceDiagnostic, nullptr, {}, + "Too many positional arguments specified"); + return {REDUCE_STOP, 1}; + } + } + + if (!*in_file) { + spvtools::Error(ReduceDiagnostic, nullptr, {}, "No input file specified"); + return {REDUCE_STOP, 1}; + } + + if (!*interestingness_test) { + spvtools::Error(ReduceDiagnostic, nullptr, {}, + "No interestingness test specified"); + return {REDUCE_STOP, 1}; + } + + return {REDUCE_CONTINUE, 0}; +} + +} // namespace + +const auto kDefaultEnvironment = SPV_ENV_UNIVERSAL_1_3; + +int main(int argc, const char** argv) { + const char* in_file = nullptr; + const char* interestingness_test = nullptr; + + spv_target_env target_env = kDefaultEnvironment; + spvtools::ReducerOptions reducer_options; + + ReduceStatus status = + ParseFlags(argc, argv, &in_file, &interestingness_test, &reducer_options); + + if (status.action == REDUCE_STOP) { + return status.code; + } + + if (!CheckExecuteCommand()) { + std::cerr << "could not find shell interpreter for executing a command" + << std::endl; + return 2; + } + + Reducer reducer(target_env); + + reducer.SetInterestingnessFunction( + [interestingness_test](std::vector binary, + uint32_t reductions_applied) -> bool { + std::stringstream ss; + ss << "temp_" << std::setw(4) << std::setfill('0') << reductions_applied + << ".spv"; + const auto spv_file = ss.str(); + const std::string command = + std::string(interestingness_test) + " " + spv_file; + auto write_file_succeeded = + WriteFile(spv_file.c_str(), "wb", &binary[0], binary.size()); + (void)(write_file_succeeded); + assert(write_file_succeeded); + return ExecuteCommand(command); + }); + + reducer.AddReductionPass( + spvtools::MakeUnique(target_env)); + reducer.AddReductionPass( + spvtools::MakeUnique(target_env)); + reducer.AddReductionPass( + spvtools::MakeUnique(target_env)); + reducer.AddReductionPass( + spvtools::MakeUnique(target_env)); + reducer.AddReductionPass( + spvtools::MakeUnique( + target_env)); + reducer.AddReductionPass( + spvtools::MakeUnique(target_env)); + + reducer.SetMessageConsumer(spvtools::utils::CLIMessageConsumer); + + std::vector binary_in; + if (!ReadFile(in_file, "rb", &binary_in)) { + return 1; + } + + std::vector binary_out; + const auto reduction_status = + reducer.Run(std::move(binary_in), &binary_out, reducer_options); + + if (reduction_status == + Reducer::ReductionResultStatus::kInitialStateNotInteresting || + !WriteFile("_reduced_final.spv", "wb", binary_out.data(), + binary_out.size())) { + return 1; + } + + return 0; +} diff --git a/3rdparty/spirv-tools/tools/stats/spirv_stats.cpp b/3rdparty/spirv-tools/tools/stats/spirv_stats.cpp index 7751c6402..609a6c972 100644 --- a/3rdparty/spirv-tools/tools/stats/spirv_stats.cpp +++ b/3rdparty/spirv-tools/tools/stats/spirv_stats.cpp @@ -147,13 +147,13 @@ class StatsAggregator { } // namespace -spv_result_t AggregateStats(const spv_context_t& context, const uint32_t* words, +spv_result_t AggregateStats(const spv_context context, const uint32_t* words, const size_t num_words, spv_diagnostic* pDiagnostic, SpirvStats* stats) { std::unique_ptr vstate; spv_validator_options_t options; spv_result_t result = ValidateBinaryAndKeepValidationState( - &context, &options, words, num_words, pDiagnostic, &vstate); + context, &options, words, num_words, pDiagnostic, &vstate); if (result != SPV_SUCCESS) return result; StatsAggregator stats_aggregator(stats, vstate.get()); diff --git a/3rdparty/spirv-tools/tools/stats/spirv_stats.h b/3rdparty/spirv-tools/tools/stats/spirv_stats.h index 16e720fe3..757695775 100644 --- a/3rdparty/spirv-tools/tools/stats/spirv_stats.h +++ b/3rdparty/spirv-tools/tools/stats/spirv_stats.h @@ -83,7 +83,7 @@ struct SpirvStats { }; // Aggregates existing |stats| with new stats extracted from |binary|. -spv_result_t AggregateStats(const spv_context_t& context, const uint32_t* words, +spv_result_t AggregateStats(const spv_context context, const uint32_t* words, const size_t num_words, spv_diagnostic* pDiagnostic, SpirvStats* stats); diff --git a/3rdparty/spirv-tools/tools/stats/stats.cpp b/3rdparty/spirv-tools/tools/stats/stats.cpp index 256ec1e1b..30e3bccd6 100644 --- a/3rdparty/spirv-tools/tools/stats/stats.cpp +++ b/3rdparty/spirv-tools/tools/stats/stats.cpp @@ -19,7 +19,6 @@ #include #include -#include "source/table.h" #include "spirv-tools/libspirv.h" #include "tools/io.h" #include "tools/stats/spirv_stats.h" @@ -27,12 +26,6 @@ namespace { -struct ScopedContext { - ScopedContext(spv_target_env env) : context(spvContextCreate(env)) {} - ~ScopedContext() { spvContextDestroy(context); } - spv_context context; -}; - void PrintUsage(char* argv0) { printf( R"(%s - Collect statistics from one or more SPIR-V binary file(s). @@ -120,8 +113,8 @@ int main(int argc, char** argv) { std::cerr << "Processing " << paths.size() << " files..." << std::endl; - ScopedContext ctx(SPV_ENV_UNIVERSAL_1_1); - spvtools::SetContextMessageConsumer(ctx.context, DiagnosticsMessageHandler); + spvtools::Context ctx(SPV_ENV_UNIVERSAL_1_1); + ctx.SetMessageConsumer(DiagnosticsMessageHandler); spvtools::stats::SpirvStats stats; stats.opcode_markov_hist.resize(1); @@ -138,7 +131,7 @@ int main(int argc, char** argv) { if (!ReadFile(path, "rb", &contents)) return 1; if (SPV_SUCCESS != - spvtools::stats::AggregateStats(*ctx.context, contents.data(), + spvtools::stats::AggregateStats(ctx.CContext(), contents.data(), contents.size(), nullptr, &stats)) { std::cerr << "error: Failed to aggregate stats for " << path << std::endl; return 1; diff --git a/3rdparty/spirv-tools/tools/val/val.cpp b/3rdparty/spirv-tools/tools/val/val.cpp index 172dd121d..8b1d048fd 100644 --- a/3rdparty/spirv-tools/tools/val/val.cpp +++ b/3rdparty/spirv-tools/tools/val/val.cpp @@ -45,11 +45,18 @@ Options: --max-function-args --max-control-flow-nesting-depth --max-access-chain-indexes + --max-id-bound --relax-logical-pointer Allow allocating an object of a pointer type and returning a pointer value from a function in logical addressing mode - --relax-block-layout Enable VK_HR_relaxed_block_layout when checking standard - uniform/storage buffer layout - --skip-block-layout Skip checking standard uniform/storage buffer layout + --relax-block-layout Enable VK_KHR_relaxed_block_layout when checking standard + uniform, storage buffer, and push constant layouts. + This is the default when targeting Vulkan 1.1 or later. + --scalar-block-layout Enable VK_EXT_scalar_block_layout when checking standard + uniform, storage buffer, and push constant layouts. Scalar layout + rules are more permissive than relaxed block layout so in effect + this will override the --relax-block-layout option. + --skip-block-layout Skip checking standard uniform/storage buffer layout. + Overrides any --relax-block-layout or --scalar-block-layout option. --relax-struct-store Allow store from one struct type to a different type with compatible layout and members. @@ -127,6 +134,8 @@ int main(int argc, char** argv) { options.SetRelaxLogicalPointer(true); } else if (0 == strcmp(cur_arg, "--relax-block-layout")) { options.SetRelaxBlockLayout(true); + } else if (0 == strcmp(cur_arg, "--scalar-block-layout")) { + options.SetScalarBlockLayout(true); } else if (0 == strcmp(cur_arg, "--skip-block-layout")) { options.SetSkipBlockLayout(true); } else if (0 == strcmp(cur_arg, "--relax-struct-store")) { diff --git a/3rdparty/spirv-tools/utils/check_copyright.py b/3rdparty/spirv-tools/utils/check_copyright.py index 85ea12891..fc249e9bd 100755 --- a/3rdparty/spirv-tools/utils/check_copyright.py +++ b/3rdparty/spirv-tools/utils/check_copyright.py @@ -32,9 +32,9 @@ AUTHORS = ['The Khronos Group Inc.', 'Google Inc.', 'Google LLC', 'Pierre Moreau'] -CURRENT_YEAR='2018' +CURRENT_YEAR='2019' -YEARS = '(2014-2016|2015-2016|2016|2016-2017|2017|2018)' +YEARS = '(2014-2016|2015-2016|2016|2016-2017|2017|2018|2019)' COPYRIGHT_RE = re.compile( 'Copyright \(c\) {} ({})'.format(YEARS, '|'.join(AUTHORS))) diff --git a/scripts/shaderc.lua b/scripts/shaderc.lua index 805e3e760..7e34656bc 100644 --- a/scripts/shaderc.lua +++ b/scripts/shaderc.lua @@ -65,6 +65,8 @@ project "spirv-opt" path.join(SPIRV_TOOLS, "source/spirv_definition.h"), path.join(SPIRV_TOOLS, "source/spirv_endian.cpp"), path.join(SPIRV_TOOLS, "source/spirv_endian.h"), + path.join(SPIRV_TOOLS, "source/spirv_optimizer_options.cpp"), + path.join(SPIRV_TOOLS, "source/spirv_reducer_options.cpp"), path.join(SPIRV_TOOLS, "source/spirv_target_env.cpp"), path.join(SPIRV_TOOLS, "source/spirv_target_env.h"), path.join(SPIRV_TOOLS, "source/spirv_validator_options.cpp"), @@ -89,6 +91,8 @@ project "spirv-opt" path.join(SPIRV_TOOLS, "source/val/decoration.h"), path.join(SPIRV_TOOLS, "source/val/function.cpp"), path.join(SPIRV_TOOLS, "source/val/instruction.cpp"), + path.join(SPIRV_TOOLS, "source/val/validate.cpp"), + path.join(SPIRV_TOOLS, "source/val/validate.h"), path.join(SPIRV_TOOLS, "source/val/validate_adjacency.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_annotation.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_arithmetics.cpp"), @@ -106,22 +110,22 @@ project "spirv-opt" path.join(SPIRV_TOOLS, "source/val/validate_decorations.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_derivatives.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_execution_limitations.cpp"), - path.join(SPIRV_TOOLS, "source/val/validate_ext_inst.cpp"), + path.join(SPIRV_TOOLS, "source/val/validate_extensions.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_function.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_id.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_image.cpp"), - path.join(SPIRV_TOOLS, "source/val/validate_interfaces.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_instruction.cpp"), + path.join(SPIRV_TOOLS, "source/val/validate_interfaces.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_layout.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_literals.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_logicals.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_memory.cpp"), + path.join(SPIRV_TOOLS, "source/val/validate_memory_semantics.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_mode_setting.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_non_uniform.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_primitives.cpp"), + path.join(SPIRV_TOOLS, "source/val/validate_scopes.cpp"), path.join(SPIRV_TOOLS, "source/val/validate_type.cpp"), - path.join(SPIRV_TOOLS, "source/val/validate.cpp"), - path.join(SPIRV_TOOLS, "source/val/validate.h"), path.join(SPIRV_TOOLS, "source/val/validation_state.cpp"), } @@ -461,6 +465,7 @@ project "glsl-optimizer" "-fno-strict-aliasing", -- glsl-optimizer has bugs if strict aliasing is used. "-Wno-implicit-fallthrough", + "-Wno-parentheses", "-Wno-sign-compare", "-Wno-unused-function", "-Wno-unused-parameter",