[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

vulkan: Changes to 'debian-unstable'



 CMakeLists.txt                                             |   21 
 README.md                                                  |    8 
 build_windows_targets.bat                                  |   12 
 debian/changelog                                           |    7 
 debian/patches/layers-install-to-cmake-install-libdir.diff |    2 
 debian/patches/loader-add-install-rule.diff                |    4 
 debian/patches/trim-build.diff                             |    2 
 debian/patches/use-mxgot-for-mips64.patch                  |    6 
 demos/android/include/lunarg.ppm.h                         | 4776 +--
 demos/cube.c                                               |  372 
 demos/cube.vert                                            |    4 
 demos/lunarg.ppm                                           |  248 
 demos/tri.c                                                |   45 
 demos/vulkaninfo.c                                         |  105 
 generator.py                                               |  146 
 glslang_revert_a5c33d.patch.txt                            |   18 
 glslang_revision                                           |    2 
 include/vulkan/vk_layer.h                                  |   13 
 include/vulkan/vk_platform.h                               |   14 
 include/vulkan/vulkan.h                                    |  169 
 include/vulkan/vulkan.hpp                                  |20419 +++++++++++++
 layers/CMakeLists.txt                                      |   10 
 layers/README.md                                           |    2 
 layers/core_validation.cpp                                 | 2431 +
 layers/core_validation.h                                   |   86 
 layers/core_validation_error_enums.h                       |   14 
 layers/core_validation_types.h                             |  192 
 layers/descriptor_sets.cpp                                 |  195 
 layers/descriptor_sets.h                                   |   14 
 layers/image.cpp                                           |  137 
 layers/linux/VkLayer_core_validation.json                  |    2 
 layers/linux/VkLayer_image.json                            |    2 
 layers/linux/VkLayer_object_tracker.json                   |    2 
 layers/linux/VkLayer_parameter_validation.json             |    2 
 layers/linux/VkLayer_swapchain.json                        |    2 
 layers/linux/VkLayer_threading.json                        |    2 
 layers/linux/VkLayer_unique_objects.json                   |    2 
 layers/object_tracker.cpp                                  | 4050 ++
 layers/object_tracker.h                                    | 1176 
 layers/parameter_name.h                                    |  148 
 layers/parameter_validation.cpp                            | 2342 -
 layers/parameter_validation_utils.h                        |  299 
 layers/swapchain.cpp                                       | 1593 -
 layers/swapchain.h                                         |   60 
 layers/unique_objects.h                                    |  196 
 layers/vk_layer_config.cpp                                 |    4 
 layers/vk_layer_config.h                                   |    2 
 layers/vk_layer_logging.h                                  |    9 
 layers/vk_layer_settings.txt                               |    6 
 layers/vk_layer_table.cpp                                  |    1 
 layers/vk_layer_utils.cpp                                  |  416 
 layers/vk_layer_utils.h                                    |    1 
 layers/vk_validation_layer_details.md                      |   77 
 layers/windows/VkLayer_core_validation.json                |    2 
 layers/windows/VkLayer_image.json                          |    2 
 layers/windows/VkLayer_object_tracker.json                 |    2 
 layers/windows/VkLayer_parameter_validation.json           |    2 
 layers/windows/VkLayer_swapchain.json                      |    2 
 layers/windows/VkLayer_threading.json                      |    2 
 layers/windows/VkLayer_unique_objects.json                 |    2 
 libs/vkjson/CMakeLists.txt                                 |    4 
 libs/vkjson/vkjson_instance.cc                             |    9 
 loader/CMakeLists.txt                                      |    4 
 loader/LoaderAndLayerInterface.md                          |  124 
 loader/debug_report.c                                      |   87 
 loader/dev_ext_trampoline.c                                | 1500 
 loader/extensions.c                                        |  171 
 loader/extensions.h                                        |   38 
 loader/gpa_helper.h                                        |    4 
 loader/loader.c                                            |  496 
 loader/loader.h                                            |   39 
 loader/loader.rc                                           |    4 
 loader/table_ops.h                                         |   28 
 loader/trampoline.c                                        |   29 
 loader/vk_loader_platform.h                                |   61 
 loader/wsi.c                                               |  358 
 spirv-headers_revision                                     |    1 
 spirv-tools_revision                                       |    2 
 tests/.clang-format                                        |    6 
 tests/CMakeLists.txt                                       |    1 
 tests/layer_validation_tests.cpp                           |11043 ++++---
 tests/layers/CMakeLists.txt                                |   13 
 tests/layers/linux/VkLayer_test.json                       |   17 
 tests/layers/test.cpp                                      |  140 
 tests/layers/windows/VkLayer_test.json                     |   17 
 tests/layers/wrap_objects.cpp                              |    6 
 tests/layers/wrap_objects.h                                |   55 
 tests/loader_validation_tests.cpp                          |  653 
 tests/run_extra_loader_tests.sh                            |  106 
 tests/run_loader_tests.sh                                  |   89 
 tests/test_common.h                                        |  162 
 tests/test_environment.cpp                                 |   24 
 tests/vkrenderframework.cpp                                |  663 
 tests/vkrenderframework.h                                  |  161 
 tests/vktestbinding.cpp                                    |  304 
 tests/vktestbinding.h                                      |  394 
 tests/vktestframework.cpp                                  |  316 
 tests/vktestframework.h                                    |   17 
 tests/vktestframeworkandroid.cpp                           |   59 
 tests/vktestframeworkandroid.h                             |   20 
 update_external_sources.bat                                |   15 
 update_external_sources.sh                                 |   16 
 vk-generate.py                                             |  103 
 vk-layer-generate.py                                       |  719 
 vk.xml                                                     |  934 
 vk_helper.py                                               |   10 
 vk_layer_documentation_generate.py                         |   31 
 vulkan.py                                                  |  198 
 108 files changed, 43225 insertions(+), 15908 deletions(-)

New commits:
commit 4bf11aa19b747fc208bb6440674360f50ee71f52
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue Sep 20 08:31:08 2016 +0300

    upload to sid

diff --git a/debian/changelog b/debian/changelog
index 452d4aa..4df80be 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,9 @@
-vulkan (1.0.26.0+dfsg1-1) UNRELEASED; urgency=medium
+vulkan (1.0.26.0+dfsg1-1) unstable; urgency=medium
 
   * New upstream release.
   * patches: Refreshed.
 
- -- Timo Aaltonen <tjaalton@debian.org>  Mon, 19 Sep 2016 21:48:11 +0300
+ -- Timo Aaltonen <tjaalton@debian.org>  Tue, 20 Sep 2016 08:30:52 +0300
 
 vulkan (1.0.21.0+dfsg1-1) unstable; urgency=medium
 

commit a6e65ac25029fbdc438b1366d5a7d87bbbfa328f
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue Sep 20 08:28:56 2016 +0300

    patches: Refreshed.

diff --git a/debian/changelog b/debian/changelog
index aaa7498..452d4aa 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 vulkan (1.0.26.0+dfsg1-1) UNRELEASED; urgency=medium
 
   * New upstream release.
+  * patches: Refreshed.
 
  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 19 Sep 2016 21:48:11 +0300
 
diff --git a/debian/patches/layers-install-to-cmake-install-libdir.diff b/debian/patches/layers-install-to-cmake-install-libdir.diff
index ddfc3a0..710144b 100644
--- a/debian/patches/layers-install-to-cmake-install-libdir.diff
+++ b/debian/patches/layers-install-to-cmake-install-libdir.diff
@@ -15,7 +15,7 @@ Date:   Wed Feb 10 15:11:54 2016 -0500
      endmacro()
  endif()
  
-@@ -148,7 +148,7 @@ if (WIN32)
+@@ -146,7 +146,7 @@ if (WIN32)
      add_library(VkLayer_utils STATIC vk_layer_config.cpp vk_layer_extension_utils.cpp vk_layer_utils.cpp)
  else()
      add_library(VkLayer_utils SHARED vk_layer_config.cpp vk_layer_extension_utils.cpp vk_layer_utils.cpp)
diff --git a/debian/patches/loader-add-install-rule.diff b/debian/patches/loader-add-install-rule.diff
index 3be8930..b7bf0f7 100644
--- a/debian/patches/loader-add-install-rule.diff
+++ b/debian/patches/loader-add-install-rule.diff
@@ -6,9 +6,9 @@ Date:   Wed Feb 10 15:17:06 2016 -0500
 
 --- a/loader/CMakeLists.txt
 +++ b/loader/CMakeLists.txt
-@@ -84,4 +84,5 @@ else()
+@@ -86,4 +86,5 @@ else()
      add_library(vulkan SHARED ${LOADER_SRCS})
-     set_target_properties(vulkan PROPERTIES SOVERSION "1" VERSION "1.0.21")
+     set_target_properties(vulkan PROPERTIES SOVERSION "1" VERSION "1.0.26")
      target_link_libraries(vulkan -ldl -lpthread -lm)
 +    install(TARGETS vulkan DESTINATION ${CMAKE_INSTALL_LIBDIR})
  endif()
diff --git a/debian/patches/trim-build.diff b/debian/patches/trim-build.diff
index 98cd147..1992e09 100644
--- a/debian/patches/trim-build.diff
+++ b/debian/patches/trim-build.diff
@@ -1,6 +1,6 @@
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -103,10 +103,10 @@ else()
+@@ -101,10 +101,10 @@ else()
  endif()
  
  option(BUILD_LOADER "Build loader" ON)
diff --git a/debian/patches/use-mxgot-for-mips64.patch b/debian/patches/use-mxgot-for-mips64.patch
index 14b60fd..2c1f17f 100644
--- a/debian/patches/use-mxgot-for-mips64.patch
+++ b/debian/patches/use-mxgot-for-mips64.patch
@@ -3,8 +3,8 @@ Author: Dejan Latinovic <Dejan.Latinovic@imgtec.com>
 
 --- a/layers/CMakeLists.txt
 +++ b/layers/CMakeLists.txt
-@@ -104,6 +104,12 @@ else()
-     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
+@@ -102,6 +102,12 @@ else()
+     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare -fvisibility=default")
  endif()
  
 +if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips64")
@@ -14,5 +14,5 @@ Author: Dejan Latinovic <Dejan.Latinovic@imgtec.com>
 +endif()
 +
  add_custom_command(OUTPUT vk_dispatch_table_helper.h
-     COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/vk-generate.py ${DisplayServer} dispatch-table-ops layer > vk_dispatch_table_helper.h
+     COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/vk-generate.py AllPlatforms dispatch-table-ops layer > vk_dispatch_table_helper.h
      DEPENDS ${PROJECT_SOURCE_DIR}/vk-generate.py ${PROJECT_SOURCE_DIR}/vulkan.py)

commit e09305ecad13520f2278e9432442ce7b82958af3
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue Sep 20 08:28:30 2016 +0300

    delete new files in build-android/ and windowsRuntimeInstaller/

diff --git a/build-android/AndroidManifest.xml b/build-android/AndroidManifest.xml
deleted file mode 100644
index 45a26b6..0000000
--- a/build-android/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"; package="com.example.VulkanLayerValidationTests" android:versionCode="1" android:versionName="1.0">
-
-    <!-- This is the platform API where NativeActivity was introduced. -->
-    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="23"/>
-
-    <!-- This .apk has no Java code itself, so set hasCode to false. -->
-    <application android:label="@string/app_name" android:hasCode="false" android:debuggable='false'>
-
-        <!-- This allows writing log files to sdcard -->
-        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
-        <!-- Our activity is the built-in NativeActivity framework class.
-             This will take care of integrating with our NDK code. -->
-        <activity android:name="android.app.NativeActivity" android:label="@string/app_name" android:exported="true">
-            <!-- Tell NativeActivity the name of or .so -->
-            <meta-data android:name="android.app.lib_name" android:value="VulkanLayerValidationTests"/>
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
-            </intent-filter>
-        </activity>
-    </application>
-
-</manifest>
diff --git a/build-android/res/values/strings.xml b/build-android/res/values/strings.xml
deleted file mode 100644
index 8ff71b0..0000000
--- a/build-android/res/values/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 2016 The Android Open Source Project
-
-     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.
--->
-
-<!-- This file contains resource definitions for displayed strings, allowing
-     them to be changed based on the locale and options. -->
-
-<resources>
-    <!-- Simple strings. -->
-    <string name="app_name">VulkanLayerValidationTests</string>
-
-</resources>
diff --git a/build-android/spirv-headers_revision_android b/build-android/spirv-headers_revision_android
deleted file mode 100644
index 74846cc..0000000
--- a/build-android/spirv-headers_revision_android
+++ /dev/null
@@ -1 +0,0 @@
-3814effb879ab5a98a7b9288a4b4c7849d2bc8ac
diff --git a/windowsRuntimeInstaller/ConfigureRT.vcxproj b/windowsRuntimeInstaller/ConfigureRT.vcxproj
deleted file mode 100644
index 2627b17..0000000
--- a/windowsRuntimeInstaller/ConfigureRT.vcxproj
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{09753397-FB1C-469E-9BCA-8F0A19B9A8DA}</ProjectGuid>
-    <RootNamespace>ConfigureRT</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup />
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <WarningLevel>Level2</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>false</SDLCheck>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level2</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>false</SDLCheck>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="configure_runtime.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/windowsRuntimeInstaller/configure_runtime.c b/windowsRuntimeInstaller/configure_runtime.c
deleted file mode 100644
index a8460a1..0000000
--- a/windowsRuntimeInstaller/configure_runtime.c
+++ /dev/null
@@ -1,700 +0,0 @@
-/******************************************************************************
- * Copyright (c) 2016 The Khronos Group
- * Copyright (c) 2016 Valve Corporation
- * Copyright (c) 2016 LunarG, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you man not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is destributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language govering permissions and
- * limitations under the License.
- *
- * Author: Lenny Komow <lenny@lunarg.com>
- *
- *****************************************************************************/
-
-/* 
- * This program is used by the Vulkan Runtime Installer/Uninstaller to:
- * - Copy the most recent vulkan<majorabi>-*.dll in C:\Windows\System32
- *   to vulkan<majorabi>.dll
- * - Copy the most recent version of vulkaninfo-<abimajor>-*.exe in
- *   C:\Windows\System32 to vulkaninfo.exe
- * - The same thing is done for those files in C:\Windows\SysWOW64, but
- *   only on a 64-bit target
- * - Set the layer registry entried to point to the layer json files in
- *   the Vulkan SDK associated with the most recent vulkan*.dll
- *
- * The program must be called with the following parameters:
- *     --major-abi: A single number specifying the major abi version
- */
-
-// Compile with: `cl.exe configure_runtime.c /link advapi32.lib`
-// Be sure to use the x86 version of cl.exe
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windows.h>
-
-// This hack gets Visual Studio 2013 to handle C99 stuff properly
-// If we drop support for 2013, it would be a good idea to remove this
-#if _MSC_VER < 1900
-#define inline __inline
-#define snprintf _snprintf
-#endif
-
-#if defined(_WIN64)
-#error "This program is designed only as a 32-bit program. It should not be built as 64-bit."
-#endif
-
-#define COPY_BUFFER_SIZE (1024)
-#define CHECK_ERROR(statement) { int error = (statement); if(error) return error; }
-#define CHECK_ERROR_HANDLED(statement, handler) { int error = (statement); if(error) { { handler } return error; } }
-#define SDK_VERSION_BUFFER_SIZE (64)
-
-enum Platform
-{
-    PLATFORM_X64,
-    PLATFORM_X86,
-};
-
-#pragma pack(1)
-struct SDKVersion
-{
-    long major;
-    long minor;
-    long patch;
-    long build;
-    char extended[SDK_VERSION_BUFFER_SIZE];
-};
-
-const char* FLAG_ABI_MAJOR = "--abi-major";
-const char* PATH_SYSTEM32 = "\\SYSTEM32\\";
-const char* PATH_SYSWOW64 = "\\SysWOW64\\";
-
-inline size_t max_s(size_t a, size_t b) { return a > b ? a : b; }
-inline size_t min_s(size_t a, size_t b) { return a > b ? a : b; }
-
-// Add the registry entries for all explicit layers
-//
-// log (input) - Logging file stream
-// install_path (input) - The installation path of the SDK which provides the layers
-// platform (input) - The platform to set the installation for (x64 or x86)
-// Returns: Zero on success, an error code on failure
-int add_explicit_layers(FILE* log, const char* install_path, enum Platform platform);
-
-// Compare two sdk versions
-//
-// Returns: Zero if they are equal, below zero if a predates b, greater than zero if b predates a
-int compare_versions(const struct SDKVersion* a, const struct SDKVersion* b);
-
-// Locate all of the SDK installations
-//
-// install_paths (output) - A poiner to an array of the installations paths
-// install_versions (output) - A pointer to an array of the SDK versions
-// count (output) - A pointer to the number of items in each array
-// Returns: Zero on success, an error code on failure
-//
-// Both install_paths and install_versions are allocated on the heap. To free them properly,
-// call free_installations(), even if this function returned an error code. The orders of
-// install_paths and install_versions match, so (*install_paths)[2] is guaranteed to match
-// (*install_versions)[2]
-int find_installations(char*** install_paths, struct SDKVersion** install_versions, size_t* count);
-
-// Free the memory allocated by find_installations()
-void free_installations(char** install_paths, struct SDKVersion* install_versions, size_t count);
-
-// Parse command line arguments for the program
-//
-// log (input) - Logging file stream
-// argc (input) - The argument count
-// argv (input) - An array of argument strings
-// abi_major (output) - The major abi version from the arguments
-// Returns: Zero on success, an error code on failure
-int parse_arguments(FILE* log, int argc, char** argv, long* abi_major);
-
-// Read the version from a string
-//
-// version_string (input) - A string in the format <abi>.<major>.<minor>.<patch>.<build>.<extended>
-// version (output) - The version indicated by the input string
-// Returns: Zero on success, an error code on failure
-int read_version(const char* version_string, struct SDKVersion* version);
-
-// Read the version from a filename
-//
-// filename (input) - The name of a .dll or .exe file, in the format
-//     somename-<abi>-<major>-<minor>-<path>-<build>-<extended>.dll
-// version (output) - The versions indicated by the input string
-// Returns: Zero on success, an error code on failure
-int read_version_from_filename(const char* filename, struct SDKVersion* version);
-
-// Remove explicit layers from the Windows registry
-//
-// log (input) - Loggin file stream
-// install_paths (input) - An array of every vulkan installation path
-// count (input) - The number of vulkan installations
-// platform (input) - The platform (x64 or x86) of the registry to use (both exist on x64)
-// Returns: Zero on success, an error code on failure
-int remove_explicit_layers(FILE* log, const char** install_paths, size_t count, enum Platform platform);
-
-// Update all explicity layers in the windows registry
-//
-// log (input) - Logging file stream
-// platform (input) - The platform of the OS (both registries will be modified if this is x64)
-// version (input) - The version that should be set to current (if it exists)
-// Returns: Zero on success, an error code on failure
-int update_registry_layers(FILE* log, enum Platform platform, const struct SDKVersion* version);
-
-// Update a single vulkan system file (vulkan.dll or vulkaninfo.exe)
-//
-// log (input) - Loggin file stream
-// name (input) - The name (excuding file extension) of the file to be updated
-// extension (input) - The file extensions of the file to be updated
-// path (input) - The directory of the file (usually System32 or SysWOW64)
-// abi_major (input) - The ABI major version to be updated
-// append_abi_major (input) - Whether or not the ABI number should be appended to the filename
-// latest_version (output) - The version of the runtime which the file was updated to
-// Returns: Zero on success, an error code on failure
-int update_system_file(FILE* log, const char* name, const char* extension, const char* path,
-    long abi_major, bool append_abi_major, struct SDKVersion* latest_version);
-
-// Update vulkan.dll and vulkaninfo.exe in all of the windows directories (System32 and SysWOW64)
-//
-// log (input) - Loging file stream
-// abi_major (input) - The ABI major version of the files that should be used
-// platform (input) - The platform for the current OS
-// latest_runtime_version (output) - The version that the runtime files were updated to
-int update_windows_directories(FILE* log, long abi_major, enum Platform platform,
-    struct SDKVersion* latest_runtime_version);
-
-int main(int argc, char** argv)
-{    
-    // Get the OS platform (x86 or x64)
-    BOOL is_64_bit;
-    IsWow64Process(GetCurrentProcess(), &is_64_bit);
-    enum Platform platform = is_64_bit ? PLATFORM_X64 : PLATFORM_X86;
-
-    FILE* log = fopen("configure_rt.log", "w");
-    if(log == NULL) {
-        return 10;
-    }
-
-    // Parse the arguments to get the abi version and the number of bits of the OS
-    long abi_major;
-    CHECK_ERROR_HANDLED(parse_arguments(log, argc, argv, &abi_major), { fclose(log); });
-    
-    // This makes System32 and SysWOW64 not do any redirection (well, until 128-bit is a thing)
-    Wow64DisableWow64FsRedirection(NULL);
-    
-    // Update System32 (on all systems) and SysWOW64 on 64-bit system
-    struct SDKVersion latest_runtime_version;
-    CHECK_ERROR_HANDLED(update_windows_directories(log, abi_major, platform, &latest_runtime_version),
-        { fclose(log); });
-
-    // Update the explicit layers that are set in the windows registry
-    CHECK_ERROR_HANDLED(update_registry_layers(log, platform, &latest_runtime_version), { fclose(log); });
-
-    fclose(log);
-    return 0;
-}
-
-int add_explicit_layers(FILE* log, const char* install_path, enum Platform platform)
-{
-    switch(platform)
-    {
-    case PLATFORM_X64:
-        fprintf(log, "Updating x64 explicit layers to path: %s\n", install_path);
-        break;
-    case PLATFORM_X86:
-        fprintf(log, "Updating x86 explicit layers to path: %s\n", install_path);
-        break;
-    }
-
-    // If this is a 32 bit system, we allow redirection to point this at the 32-bit registries.
-    // If not, we add the flag KEY_WOW64_64KEY, to disable redirection for this node.
-    HKEY hKey;
-    REGSAM flags = KEY_ALL_ACCESS;
-    if(platform == PLATFORM_X64) {
-        flags |= KEY_WOW64_64KEY;
-    }
-    
-    // Create (if needed) and open the explicit layer key
-    if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Khronos\\Vulkan\\ExplicitLayers",
-        0, NULL, REG_OPTION_NON_VOLATILE, flags, NULL, &hKey, NULL) != ERROR_SUCCESS) {
-        return 20;
-    }
-
-    const char* pattern = platform == PLATFORM_X64 ? "%s\\Bin\\VkLayer*.json" : "%s\\Bin32\\VkLayer*.json";
-    int filter_size = snprintf(NULL, 0, pattern, install_path) + 1;
-    if(filter_size < 0) {
-        return 30;
-    }
-    char* filter = malloc(filter_size);
-    snprintf(filter, filter_size, pattern, install_path);
-
-    WIN32_FIND_DATA find_data;
-    HANDLE find = FindFirstFile(filter, &find_data);
-    free(filter);
-    for(bool at_end = (find != INVALID_HANDLE_VALUE); at_end;
-        at_end = FindNextFile(find, &find_data)) {
-        
-        const char* layer_pattern = platform == PLATFORM_X64 ? "%s\\Bin\\%s" : "%s\\Bin32\\%s";
-        int layer_size = snprintf(NULL, 0, layer_pattern, install_path, find_data.cFileName) + 1;
-        if(layer_size < 0) {
-            return 40;
-        }
-        char* layer = malloc(layer_size);
-        snprintf(layer, layer_size, layer_pattern, install_path, find_data.cFileName);
-
-        fprintf(log, "Adding explicit layer: %s\n", layer);
-
-        DWORD zero = 0;
-        LSTATUS err = RegSetValueEx(hKey, layer, zero, REG_DWORD, (BYTE*) &zero, sizeof(DWORD));
-        free(layer);
-        if(err != ERROR_SUCCESS) {
-            return 50;
-        }
-    }
-
-    RegCloseKey(hKey);
-    return 0;
-}
-
-int compare_versions(const struct SDKVersion* a, const struct SDKVersion* b)
-{
-    // Compare numerical versions
-    for(int i = 0; i < 4; ++i) {
-        long* a_current = ((long*) a) + i;
-        long* b_current = ((long*) b) + i;
-        
-        if(*a_current < *b_current) {
-            return -4 + i;
-        } else if(*b_current < *a_current) {
-            return 4 - i;
-        }
-    }
-    
-    // An empty string should be considered greater (and therefore more recent) than one with test
-    if(a->extended[0] == '\0' && b->extended[0] != '\0') {
-        return 1;
-    } else if(b->extended[0] == '\0' && a->extended[0] != '\0') {
-        return -1;
-    }
-
-    // Otherwise, just do a strncmp
-    return strncmp(a->extended, b->extended, SDK_VERSION_BUFFER_SIZE);
-}
-
-int find_installations(char*** install_paths, struct SDKVersion** install_versions, size_t* count)
-{
-    *install_paths = malloc(sizeof(char*) * 64);
-    *install_versions = malloc(sizeof(struct SDKVersion) * 64);
-    *count = 0;
-
-    // We want the 64-bit registries on 64-bit windows, and the 32-bit registries on 32-bit Windows.
-    // KEY_WOW64_64KEY accomplishes this because it gets ignored on 32-bit Windows.
-    HKEY hKey;
-    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
-        0, KEY_READ | KEY_WOW64_64KEY, &hKey) != ERROR_SUCCESS) {
-        return 90;
-    }
-    
-    DWORD keyCount, keyLen;
-    RegQueryInfoKey(hKey, NULL, NULL, NULL, &keyCount, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-    for(int i = 0; i < keyCount; ++i) {
-        TCHAR name[COPY_BUFFER_SIZE];
-        DWORD nameSize = COPY_BUFFER_SIZE;
-        RegEnumKeyEx(hKey, i, name, &nameSize, NULL, NULL, NULL, NULL);
-        
-        if(strncmp("VulkanSDK", name, 9)) {
-            continue;
-        }
-        
-        HKEY subKey;
-        if(RegOpenKeyEx(hKey, name, 0, KEY_READ | KEY_WOW64_64KEY, &subKey) != ERROR_SUCCESS) {
-            continue;
-        }
-        
-        bool found_installation = false, found_version = false;
-        DWORD valueCount;
-        RegQueryInfoKey(subKey, NULL, NULL, NULL, NULL, NULL, NULL, &valueCount, NULL, NULL, NULL, NULL);
-        for(int j = 0; j < valueCount; ++j) {
-
-            TCHAR name[COPY_BUFFER_SIZE], value[COPY_BUFFER_SIZE];
-            DWORD type, buffSize = COPY_BUFFER_SIZE;
-            RegEnumValue(subKey, j, name, &buffSize, NULL, &type, value, &buffSize);
-            if(type == REG_SZ && !strcmp("InstallDir", name)) {
-                *install_paths = realloc(*install_paths, sizeof(char*) * ((*count) + 1));
-                (*install_paths)[*count] = malloc(sizeof(char) * COPY_BUFFER_SIZE);
-                strcpy((*install_paths)[*count], value);
-                found_installation = true;
-            } else if(type == REG_SZ && !strncmp("DisplayVersion", name, 8)) {
-                *install_versions = realloc(*install_versions, sizeof(struct SDKVersion) * ((*count) + 1));
-                CHECK_ERROR(read_version(value, (*install_versions) + *count));
-                found_version = true;
-            }
-            
-            if(found_installation && found_version) {
-                ++(*count);
-                break;
-            }
-        }
-        RegCloseKey(subKey);
-        
-        if(!(found_installation && found_version)) {
-            RegCloseKey(hKey);
-            return 100;
-        }
-    }
-    RegCloseKey(hKey);
-    
-    return 0;
-}
-
-void free_installations(char** install_paths, struct SDKVersion* install_versions, size_t count)
-{
-    for(size_t i = 0; i < count; ++i) {
-        free(install_paths[i]);
-    }
-    free(install_paths);
-    free(install_versions);
-}
-
-int parse_arguments(FILE* log, int argc, char** argv, long* abi_major)
-{
-    *abi_major = 0;
-
-    // Parse arguments
-    for(int i = 0; i < argc; ++i) {
-        if(!strcmp(argv[i], FLAG_ABI_MAJOR)) {
-            if(i + 1 == argc) {
-                fprintf(log, "ERROR: No value given for flag %s.\n", FLAG_ABI_MAJOR);
-                return 110;
-            }
-            *abi_major = strtol(argv[++i], NULL, 10);
-            if(*abi_major == 0) {
-                fprintf(log, "ERROR: Unable to parse ABI major version as integer.\n");
-                return 120;
-            }
-        }
-    }
-    
-    // Check that we have everything we need
-    if(*abi_major == 0 ) {
-        fprintf(log, "ERROR: Flag %s must be provided.\n", FLAG_ABI_MAJOR);
-        return 130;
-    }
-
-    // It all worked fine
-    fprintf(log, "Found ABI: %ld\n\n", *abi_major);
-    return 0;
-}
-
-int read_version(const char* version_string, struct SDKVersion* version)
-{    
-    size_t borders[4], dot_count = 0, i;
-    for(i = 0; dot_count < 3 && version_string[i] != '\0'; ++i) {
-        if(version_string[i] == '.') {
-            borders[dot_count++] = i + 1;
-        }
-    }
-    borders[3] = i + 1;
-    
-    if(dot_count < 3) {
-        return 140;
-    }
-    
-    // Read the version number
-    version->major = strtol(version_string,              NULL, 10);
-    version->minor = strtol(version_string + borders[0], NULL, 10);
-    version->patch = strtol(version_string + borders[1], NULL, 10);
-    version->build = strtol(version_string + borders[2], NULL, 10);
-
-    strncpy(version->extended, version_string + borders[3] + 1,
-        min_s(SDK_VERSION_BUFFER_SIZE - 1, strlen(version_string + borders[3] + 1)));
-    
-    return 0;
-}
-
-int read_version_from_filename(const char* filename, struct SDKVersion* version)
-{
-    size_t borders[5], dash_count = 0;
-
-    // Locate all of the dashes that divides different version numbers
-    size_t i;
-    for(i = 0; dash_count < 5; ++i) {
-        if(filename[i] == '-' && dash_count == 0) {
-            ++dash_count;
-        } else if(filename[i] == '-') {
-            borders[dash_count++ - 1] = i + 1;
-        } else if(filename[i] == '\0') {
-            return 150;
-        }
-    }
-    borders[4] = i + 1;
-    
-    // Read the version number
-    version->major = strtol(filename + borders[0], NULL, 10);
-    version->minor = strtol(filename + borders[1], NULL, 10);
-    version->patch = strtol(filename + borders[2], NULL, 10);
-    version->build = strtol(filename + borders[3], NULL, 10);
-
-    if(strcmp(filename + borders[4] + 1, "dll") && strcmp(filename + borders[4] + 1, "exe")) {
-        strncpy(version->extended, filename + borders[4] + 1, SDK_VERSION_BUFFER_SIZE - 1);
-        size_t file_len = strlen(filename + borders[4] + 1);
-        if(file_len - 4 < SDK_VERSION_BUFFER_SIZE) {
-            version->extended[file_len - 4] = '\0';
-        }
-    } else {
-        version->extended[0] = '\0';
-    }
-
-    for(size_t i = 0; version->extended[i] != '\0' && i < SDK_VERSION_BUFFER_SIZE; ++i) {
-        if(version->extended[i] == '-') {
-            version->extended[i] = '.';
-        }
-    }
-    
-    return 0;
-}
-
-int remove_explicit_layers(FILE* log, const char** install_paths, size_t count, enum Platform platform)
-{
-    switch(platform)
-    {
-    case PLATFORM_X64:
-        fprintf(log, "Removing x64 explicit layers from registry\n");
-        break;
-    case PLATFORM_X86:
-        fprintf(log, "Removing x86 explicit layers from registry\n");
-        break;
-    }
-
-    bool removed_one;
-    do {
-        // If this is a 32 bit system, we allow redirection to point this at the 32-bit registries.
-        // If not, we add the flag KEY_WOW64_64KEY, to disable redirection for this node.
-        HKEY hKey;
-        REGSAM flags = KEY_ALL_ACCESS;
-        if(platform == PLATFORM_X64) {
-            flags |= KEY_WOW64_64KEY;
-        }
-
-        // Create (if needed) and open the explicit layer key
-        if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Khronos\\Vulkan\\ExplicitLayers",
-            0, NULL, REG_OPTION_NON_VOLATILE, flags, NULL, &hKey, NULL) != ERROR_SUCCESS) {
-            return 160;
-        }
-
-        removed_one = false;
-        DWORD valueCount;
-        RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &valueCount, NULL, NULL, NULL, NULL);
-        for(DWORD i = 0; i < valueCount; ++i) {
-            TCHAR name[COPY_BUFFER_SIZE];
-            DWORD type, buffSize = COPY_BUFFER_SIZE;
-            RegEnumValue(hKey, i, name, &buffSize, NULL, &type, NULL, NULL);
-
-            for(size_t j = 0; j < count; ++j) {
-                if(strncmp(install_paths[j], name, strlen(install_paths[j])) == 0) {
-                    fprintf(log, "Removing explicit layer entry: %s\n", name);
-                    LSTATUS err = RegDeleteValue(hKey, name);
-                    if(err != ERROR_SUCCESS) {
-                        return 170;
-                    }
-                    removed_one = true;
-                    break;
-                }
-            }
-            if(removed_one) {
-                break;
-            }
-        }
-
-        RegCloseKey(hKey);
-    } while(removed_one);
-
-    return 0;
-}
-
-int update_registry_layers(FILE* log, enum Platform platform, const struct SDKVersion* version)
-{
-    char** install_paths;
-    struct SDKVersion* install_versions;
-    size_t count;
-    CHECK_ERROR_HANDLED(find_installations(&install_paths, &install_versions, &count),
-        { free_installations(install_paths, install_versions, count); });
-    for(size_t i = 0; i < count; ++i) {
-        fprintf(log, "Found installation of %ld.%ld.%ld.%ld in: %s\n", install_versions[i].major,
-            install_versions[i].minor, install_versions[i].patch, install_versions[i].build, install_paths[i]);
-    }
-    fprintf(log, "\n");
-    if(platform == PLATFORM_X64) {
-        CHECK_ERROR_HANDLED(remove_explicit_layers(log, install_paths, count, PLATFORM_X64),
-            { free_installations(install_paths, install_versions, count); });
-        fprintf(log, "\n");
-    }
-    CHECK_ERROR_HANDLED(remove_explicit_layers(log, install_paths, count, PLATFORM_X86),
-        { free_installations(install_paths, install_versions, count); });
-    fprintf(log, "\n");
-
-    if(version->major == 0 && version->minor == 0 && version->patch == 0 && version->build == 0) {
-        free_installations(install_paths, install_versions, count);
-        return 0;
-    }
-
-    for(size_t i = 0; i < count; ++i) {
-        if(compare_versions(install_versions + i, version) == 0) {
-            if(platform == PLATFORM_X64) {
-                CHECK_ERROR_HANDLED(add_explicit_layers(log, install_paths[i], PLATFORM_X64),
-                    { free_installations(install_paths, install_versions, count); });
-                fprintf(log, "\n");
-            }
-            CHECK_ERROR_HANDLED(add_explicit_layers(log, install_paths[i], PLATFORM_X86),
-                { free_installations(install_paths, install_versions, count); });
-            break;
-        }
-    }
-    free_installations(install_paths, install_versions, count);
-    return 0;
-}
-
-//int update_system_file(FILE* log, const char* name, const char* extension, const char* path,
-//    long abi_major, bool append_abi_major, struct SDKVersion* latest_version)
-int update_system_file(FILE* log, const char* name, const char* extension, const char* path,
-    long abi_major, bool leave_abi_major, struct SDKVersion* latest_version)
-{
-    // Generate the filter string
-    const char* pattern = "%s%s-%ld-*-*-*-*%s";
-    int filter_size = snprintf(NULL, 0, pattern, path, name, abi_major, extension) + 1;
-    if(filter_size < 0) {
-        return 180;
-    }
-    char* filter = malloc(filter_size);
-    snprintf(filter, filter_size, pattern, path, name, abi_major, extension);
-    
-    // Find all of the files that match the pattern
-    char* latest_filename = malloc(64);
-    memset(latest_version, 0, sizeof(struct SDKVersion));
-    WIN32_FIND_DATA find_data;
-    HANDLE find = FindFirstFile(filter, &find_data);
-    free(filter);
-    for(bool at_end = (find != INVALID_HANDLE_VALUE); at_end;
-        at_end = FindNextFile(find, &find_data)) {
-        
-        struct SDKVersion version;
-        CHECK_ERROR_HANDLED(read_version_from_filename(find_data.cFileName, &version), { free(latest_filename); });
-        
-        // Decide if this is the latest file
-        if(compare_versions(latest_version, &version) < 0) {
-            *latest_version = version;
-            const char* latestPattern = "%s%s";
-            int size = snprintf(NULL, 0, latestPattern, path, find_data.cFileName) + 1;
-            if(size < 0) {
-                free(latest_filename);
-                return 200;
-            }
-            latest_filename = realloc(latest_filename, size);
-            snprintf(latest_filename, size, latestPattern, path, find_data.cFileName);
-        }
-    }
-    FindClose(find);
-    
-    // Make sure something was found
-    if(latest_version->major == 0 && latest_version->minor == 0 && latest_version->patch == 0 &&
-        latest_version->build == 0) {
-        fprintf(log, "Didn't find any version of %s%s\n", name, extension);
-        return 0;
-    }
-    
-    fprintf(log, "Found latest version of %s%s: %ld.%ld.%ld.%ld\n", name, extension, latest_version->major,
-        latest_version->minor, latest_version->patch, latest_version->build);
-        


Reply to: