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

vulkan: Changes to 'debian-unstable'



 .appveyor.yml                                             |   10 
 BUILD.md                                                  |    4 
 CMakeLists.txt                                            |   16 
 README.md                                                 |    2 
 cmake/cmake_uninstall.cmake.in                            |   21 
 debian/changelog                                          |    6 
 debian/libvulkan-dev.install                              |    1 
 debian/patches/demos-dont-build-tri-or-cube-or-smoke.diff |    4 
 debian/patches/use-mxgot-for-mips64.patch                 |    4 
 demos/cube.c                                              |  528 ++
 demos/cube.cpp                                            |   10 
 demos/gettime.h                                           |   74 
 demos/smoke/ShellWin32.cpp                                |    2 
 external_revisions/glslang_revision                       |    2 
 external_revisions/spirv-headers_revision                 |    2 
 external_revisions/spirv-tools_revision                   |    2 
 include/vulkan/vk_icd.h                                   |    1 
 include/vulkan/vulkan.h                                   |  175 
 include/vulkan/vulkan.hpp                                 | 1136 ++++-
 layers/CMakeLists.txt                                     |   10 
 layers/buffer_validation.cpp                              | 1501 ++++---
 layers/buffer_validation.h                                |   33 
 layers/core_validation.cpp                                | 1845 ++++-----
 layers/core_validation_error_enums.h                      |    2 
 layers/core_validation_types.h                            |   57 
 layers/descriptor_sets.cpp                                |  154 
 layers/descriptor_sets.h                                  |   12 
 layers/linux/VkLayer_core_validation.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                                 | 1305 ++++--
 layers/parameter_validation.cpp                           |  640 ---
 layers/parameter_validation_utils.h                       |   31 
 layers/swapchain.cpp                                      |   67 
 layers/threading.cpp                                      |   21 
 layers/unique_objects.cpp                                 |   95 
 layers/vk_format_utils.cpp                                |  924 ++++
 layers/vk_format_utils.h                                  |  122 
 layers/vk_layer_utils.cpp                                 |  662 ---
 layers/vk_layer_utils.h                                   |   80 
 layers/vk_validation_error_database.txt                   |  346 -
 layers/windows/VkLayer_core_validation.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 
 loader/CMakeLists.txt                                     |   44 
 loader/LoaderAndLayerInterface.md                         |   18 
 loader/extension_manual.c                                 |  586 ++
 loader/extension_manual.h                                 |   49 
 loader/loader.c                                           |  253 -
 loader/loader.h                                           |   18 
 loader/loader_cmake_config.h.in                           |    2 
 loader/trampoline.c                                       |   73 
 loader/vk_loader_platform.h                               |    6 
 loader/vulkan.pc.in                                       |   11 
 scripts/cgenerator.py                                     |    2 
 scripts/generator.py                                      |    9 
 scripts/helper_file_generator.py                          |   12 
 scripts/loader_extension_generator.py                     |  212 -
 scripts/parameter_validation_generator.py                 |    9 
 scripts/threading_generator.py                            |    1 
 scripts/unique_objects_generator.py                       |   20 
 scripts/vk.xml                                            | 1098 +++--
 tests/CMakeLists.txt                                      |    9 
 tests/layer_validation_tests.cpp                          | 2791 +++++++++-----
 tests/layers/linux/VkLayer_test.json                      |    2 
 tests/layers/linux/VkLayer_wrap_objects.json              |    2 
 tests/layers/windows/VkLayer_test.json                    |    2 
 tests/layers/windows/VkLayer_wrap_objects.json            |    2 
 tests/loader_validation_tests.cpp                         |  837 ++++
 tests/vk_layer_validation_tests.vcxproj.user              |   35 
 tests/vkrenderframework.cpp                               |  162 
 tests/vkrenderframework.h                                 |   17 
 tests/vktestbinding.h                                     |    9 
 79 files changed, 10553 insertions(+), 5669 deletions(-)

New commits:
commit d1b473b61e80b5effd314e80d8cf9fafccd67545
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue May 9 14:21:22 2017 +0300

    release to experimental

diff --git a/debian/changelog b/debian/changelog
index 067cc5d..8575702 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-vulkan (1.0.46.0+dfsg1-1) UNRELEASED; urgency=medium
+vulkan (1.0.46.0+dfsg1-1) experimental; urgency=medium
 
   * New upstream release.
   * trim-build.diff, disable-mir.diff, rules: Use clang build options
@@ -7,7 +7,7 @@ vulkan (1.0.46.0+dfsg1-1) UNRELEASED; urgency=medium
   * patches: Refreshed.
   * dev.install: Add pkgconfig file.
 
- -- Timo Aaltonen <tjaalton@debian.org>  Sun, 09 Apr 2017 11:19:11 +0300
+ -- Timo Aaltonen <tjaalton@debian.org>  Tue, 09 May 2017 14:21:14 +0300
 
 vulkan (1.0.42.0+dfsg1-1) experimental; urgency=medium
 

commit ec6e75dd54a2934881da33fe6146f7bc67d68eec
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue May 9 14:19:33 2017 +0300

    dev.install: Add pkgconfig file.

diff --git a/debian/changelog b/debian/changelog
index bc5f716..067cc5d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ vulkan (1.0.46.0+dfsg1-1) UNRELEASED; urgency=medium
     instead of patching CMakeFile.txt.
   * rules: Set build type to 'Release'.
   * patches: Refreshed.
+  * dev.install: Add pkgconfig file.
 
  -- Timo Aaltonen <tjaalton@debian.org>  Sun, 09 Apr 2017 11:19:11 +0300
 
diff --git a/debian/libvulkan-dev.install b/debian/libvulkan-dev.install
index c7a5d5d..163b290 100644
--- a/debian/libvulkan-dev.install
+++ b/debian/libvulkan-dev.install
@@ -1,2 +1,3 @@
 usr/include/vulkan
 usr/lib/*/libvulkan.so
+usr/lib/*/pkgconfig/vulkan.pc

commit b7e3a1f0cec9c2c9e23138521f32dcbc9f622cc1
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue May 9 14:18:10 2017 +0300

    delete more android build files

diff --git a/build-android/glslang_url_android b/build-android/glslang_url_android
deleted file mode 100644
index d661000..0000000
--- a/build-android/glslang_url_android
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/KhronosGroup/glslang.git
diff --git a/build-android/shaderc_url_android b/build-android/shaderc_url_android
deleted file mode 100644
index 488a1fe..0000000
--- a/build-android/shaderc_url_android
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/google/shaderc.git
diff --git a/build-android/spirv-headers_url_android b/build-android/spirv-headers_url_android
deleted file mode 100644
index c37214f..0000000
--- a/build-android/spirv-headers_url_android
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/KhronosGroup/SPIRV-Headers.git
diff --git a/build-android/spirv-tools_url_android b/build-android/spirv-tools_url_android
deleted file mode 100644
index 19ccae7..0000000
--- a/build-android/spirv-tools_url_android
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/KhronosGroup/SPIRV-Tools.git

commit db1dc6d051063419bc2c3a9f5fa51f4e09b6387e
Author: Timo Aaltonen <tjaalton@debian.org>
Date:   Tue May 9 14:01:13 2017 +0300

    bump version, refresh patches

diff --git a/debian/changelog b/debian/changelog
index 5fb2a17..bc5f716 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,10 @@
-vulkan (1.0.42.2+dfsg1-1) UNRELEASED; urgency=medium
+vulkan (1.0.46.0+dfsg1-1) UNRELEASED; urgency=medium
 
   * New upstream release.
   * trim-build.diff, disable-mir.diff, rules: Use clang build options
     instead of patching CMakeFile.txt.
   * rules: Set build type to 'Release'.
+  * patches: Refreshed.
 
  -- Timo Aaltonen <tjaalton@debian.org>  Sun, 09 Apr 2017 11:19:11 +0300
 
diff --git a/debian/patches/demos-dont-build-tri-or-cube-or-smoke.diff b/debian/patches/demos-dont-build-tri-or-cube-or-smoke.diff
index c1aabca..2ce593f 100644
--- a/debian/patches/demos-dont-build-tri-or-cube-or-smoke.diff
+++ b/debian/patches/demos-dont-build-tri-or-cube-or-smoke.diff
@@ -10,7 +10,7 @@ Date:   Tue Feb 16 10:05:25 2016 -0500
 
 --- a/demos/CMakeLists.txt
 +++ b/demos/CMakeLists.txt
-@@ -61,46 +61,6 @@
+@@ -63,46 +63,6 @@ elseif(UNIX)
  else()
  endif()
  
@@ -57,7 +57,7 @@ Date:   Tue Feb 16 10:05:25 2016 -0500
  
  if(WIN32)
      include_directories (
-@@ -114,43 +74,6 @@
+@@ -116,43 +76,6 @@ endif()
  add_executable(${API_LOWERCASE}info vulkaninfo.c)
  target_link_libraries(${API_LOWERCASE}info ${LIBRARIES})
  
diff --git a/debian/patches/use-mxgot-for-mips64.patch b/debian/patches/use-mxgot-for-mips64.patch
index d915fb0..f2755c3 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
-@@ -132,6 +132,12 @@ else()
-     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare")
+@@ -138,6 +138,12 @@ if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "
+     endif()
  endif()
  
 +if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips64")

commit ebeeed1f0b22188f42c8bc8e489239386ab5f0a3
Author: Lenny Komow <lenny@lunarg.com>
Date:   Tue Apr 4 15:35:28 2017 -0600

    winsdk: Fix missing vulkaninfo file extension
    
    Change-Id: I9cef2172ed568372bca512d597099c37e4f0766e

diff --git a/windowsRuntimeInstaller/InstallerRT.nsi b/windowsRuntimeInstaller/InstallerRT.nsi
index 5601a9c..f7bde18 100644
--- a/windowsRuntimeInstaller/InstallerRT.nsi
+++ b/windowsRuntimeInstaller/InstallerRT.nsi
@@ -469,7 +469,7 @@ Section
         # vulkaninfo.exe
         File /oname=${APILOWER}info-$FileVersion.exe ..\build32\demos\RelWithDebInfo\${APILOWER}info.exe
         SetOutPath "$INSTDIR"
-        File /oname=${APILOWER}info ..\build32\demos\RelWithDebInfo\${APILOWER}info.exe
+        File /oname=${APILOWER}info.exe ..\build32\demos\RelWithDebInfo\${APILOWER}info.exe
         StrCpy $1 55
         Call CheckForError
 

commit 91118f7ee43eb6947bbba00a6c9a066b23298fcd
Author: Mark Lobodzinski <mark@lunarg.com>
Date:   Mon Apr 3 10:39:08 2017 -0600

    layers: Fix incorrect feature protect for KHX ext
    
    Change-Id: I503c2984163455fd5fd91df6fa70da1dc88fc684

diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp
index 9fbc1ad..74dac26 100644
--- a/layers/object_tracker.cpp
+++ b/layers/object_tracker.cpp
@@ -3403,11 +3403,11 @@ static void CheckDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo,
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHX_EXTERNAL_MEMORY_FD_EXTENSION_NAME) == 0) {
             device_data->enables.khx_external_memory_fd = true;
         }
-#ifdef VK_USE_PLATFORM_WIN32_KHR
+#ifdef VK_USE_PLATFORM_WIN32_KHX
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHX_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME) == 0) {
             device_data->enables.khx_external_memory_win32 = true;
         }
-#endif  // VK_USE_PLATFORM_WIN32_KHR
+#endif  // VK_USE_PLATFORM_WIN32_KHX
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHX_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME) == 0) {
             device_data->enables.khx_external_semaphore_fd = true;
         }

commit edb4535f073a873021e02c54105385dd0cc205a7
Author: Ian Elliott <ianelliott@google.com>
Date:   Tue Mar 28 11:10:18 2017 -0600

    demos: Remove DbgMsgs from incremental_present ext
    
    The only DbgMsg messages left tell the user, if they use
    "--incremental_present", whether the functionality is actually being
    used, or if the VK_KHR_incremental_present extension isn't available.
    
    NOTE: When somebody wants to see all of the DbgMsg messages, they should
    use "git revert" with this commit.
    
    Change-Id: Ic4189cbec2a64c50135b16c331c808fbbce975dc

diff --git a/demos/cube.c b/demos/cube.c
index 6570473..10ec60d 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -1075,19 +1075,6 @@ static void demo_draw(struct demo *demo) {
             .pRegions = &region,
         };
         present.pNext = &regions;
-        DbgMsg("present = %p, present.pNext = %p, regions = %p, regions.pNext = %p\n",
-               &present,
-               present.pNext,
-               &regions,
-               regions.pNext);
-        DbgMsg("Present Rectangle has offset: (%d, %d) and extent: (%d, %d)\n",
-               regions.pRegions->pRectangles->offset.x,
-               regions.pRegions->pRectangles->offset.y,
-               regions.pRegions->pRectangles->extent.width,
-               regions.pRegions->pRectangles->extent.height);
-        DbgMsg("regions = %p, regions.pRegions = %p, "
-               "regions.pRegions->pRectangles = %p\n",
-               &regions, regions.pRegions, regions.pRegions->pRectangles);
     }
 
     if (demo->VK_GOOGLE_display_timing_enabled) {

commit 02f7d213d30762f60b3f15207e497574080ee038
Author: Ian Elliott <ianelliott@google.com>
Date:   Tue Mar 28 11:06:33 2017 -0600

    demos: Use VK_KHR_incremental_present extension
    
    Show how to use the VK_KHR_incremental_present extension.  Other notes:
    
    - There are a few diagnostic DbgMsg()'s, which can help show the usage.
    - Added a "--incremental_present" command-line option to turn on use of
      VK_KHR_incremental_present
    - Should compile and run on Windows, Linux, and Android, but the feature will
      only really be used on systems that support the extension.
    
    Change-Id: I8a79d806cab7d35197c94dd85358a62b6b7469be

diff --git a/demos/cube.c b/demos/cube.c
index 9b4980e..6570473 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -347,6 +347,8 @@ struct demo {
     bool use_staging_buffer;
     bool separate_present_queue;
 
+    bool VK_KHR_incremental_present_enabled;
+
     bool VK_GOOGLE_display_timing_enabled;
     bool syncd_with_actual_presents;
     uint64_t refresh_duration;
@@ -1046,6 +1048,48 @@ static void demo_draw(struct demo *demo) {
         .pImageIndices = &demo->current_buffer,
     };
 
+    if (demo->VK_KHR_incremental_present_enabled) {
+        // If using VK_KHR_incremental_present, we provide a hint of the region
+        // that contains changed content relative to the previously-presented
+        // image.  The implementation can use this hint in order to save
+        // work/power (by only copying the region in the hint).  The
+        // implementation is free to ignore the hint though, and so we must
+        // ensure that the entire image has the correctly-drawn content.
+        uint32_t eighthOfWidth = demo->width / 8;
+        uint32_t eighthOfHeight = demo->height / 8;
+        VkRectLayerKHR rect = {
+            .offset.x = eighthOfWidth,
+            .offset.y = eighthOfHeight,
+            .extent.width = eighthOfWidth * 6,
+            .extent.height = eighthOfHeight * 6,
+            .layer = 0,
+        };
+        VkPresentRegionKHR region = {
+            .rectangleCount = 1,
+            .pRectangles = &rect,
+        };
+        VkPresentRegionsKHR regions = {
+            .sType = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR,
+            .pNext = present.pNext,
+            .swapchainCount = present.swapchainCount,
+            .pRegions = &region,
+        };
+        present.pNext = &regions;
+        DbgMsg("present = %p, present.pNext = %p, regions = %p, regions.pNext = %p\n",
+               &present,
+               present.pNext,
+               &regions,
+               regions.pNext);
+        DbgMsg("Present Rectangle has offset: (%d, %d) and extent: (%d, %d)\n",
+               regions.pRegions->pRectangles->offset.x,
+               regions.pRegions->pRectangles->offset.y,
+               regions.pRegions->pRectangles->extent.width,
+               regions.pRegions->pRectangles->extent.height);
+        DbgMsg("regions = %p, regions.pRegions = %p, "
+               "regions.pRegions->pRectangles = %p\n",
+               &regions, regions.pRegions, regions.pRegions->pRectangles);
+    }
+
     if (demo->VK_GOOGLE_display_timing_enabled) {
         VkPresentTimeGOOGLE ptime;
         if (demo->prev_desired_present_time == 0) {
@@ -3330,6 +3374,27 @@ static void demo_init_vk(struct demo *demo) {
             assert(demo->enabled_extension_count < 64);
         }
 
+        if (demo->VK_KHR_incremental_present_enabled) {
+            // Even though the user "enabled" the extension via the command
+            // line, we must make sure that it's enumerated for use with the
+            // device.  Therefore, disable it here, and re-enable it again if
+            // enumerated.
+            demo->VK_KHR_incremental_present_enabled = false;
+            for (uint32_t i = 0; i < device_extension_count; i++) {
+                if (!strcmp(VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME,
+                            device_extensions[i].extensionName)) {
+                    demo->extension_names[demo->enabled_extension_count++] =
+                        VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME;
+                    demo->VK_KHR_incremental_present_enabled = true;
+                    DbgMsg("VK_KHR_incremental_present extension enabled\n");
+                }
+                assert(demo->enabled_extension_count < 64);
+            }
+            if (!demo->VK_KHR_incremental_present_enabled) {
+                DbgMsg("VK_KHR_incremental_present extension NOT AVAILABLE\n");
+            }
+        }
+
         if (demo->VK_GOOGLE_display_timing_enabled) {
             // Even though the user "enabled" the extension via the command
             // line, we must make sure that it's enumerated for use with the
@@ -3794,12 +3859,16 @@ static void demo_init(struct demo *demo, int argc, char **argv) {
             demo->VK_GOOGLE_display_timing_enabled = true;
             continue;
         }
+        if (strcmp(argv[i], "--incremental_present") == 0) {
+            demo->VK_KHR_incremental_present_enabled = true;
+            continue;
+        }
 
 #if defined(ANDROID)
         ERR_EXIT("Usage: cube [--validate]\n", "Usage");
 #else
         fprintf(stderr, "Usage:\n  %s [--use_staging] [--validate] [--validate-checks-disabled] [--break] "
-                        "[--c <framecount>] [--suppress_popups] [--display_timing] [--present_mode <present mode enum>]\n"
+                        "[--c <framecount>] [--suppress_popups] [--incremental_present] [--display_timing] [--present_mode <present mode enum>]\n"
                         "VK_PRESENT_MODE_IMMEDIATE_KHR = %d\n"
                         "VK_PRESENT_MODE_MAILBOX_KHR = %d\n"
                         "VK_PRESENT_MODE_FIFO_KHR = %d\n"

commit b5cbd4bac422dae67a912dbbcef2711bc0274ce9
Author: Tobin Ehlis <tobine@google.com>
Date:   Fri Jan 13 12:13:57 2017 -0700

    layers: incremental_present parameter validation
    
    Add parameter validation for VK_KHR_incremental_present extension.
    If the VkPresentRegionsKHR is included down the struct chain for
    QueuePresentKHR() validate its parameters.
    
    Change-Id: I97abe552411f229eecbbf7df7d565f7953cdd1b7

diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp
index 0edce55..f3bdc4a 100644
--- a/layers/parameter_validation.cpp
+++ b/layers/parameter_validation.cpp
@@ -98,6 +98,7 @@ struct layer_data {
             bool nv_external_memory : 1;
             bool nv_external_memory_win32 : 1;
             bool nvx_device_generated_commands : 1;
+            bool incremental_present : 1;
         };
         uint64_t padding[4];
     } enables;
@@ -1675,6 +1676,8 @@ static void CheckDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo,
 #endif
         } else if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME) == 0) {
             device_data->enables.nvx_device_generated_commands = true;
+        } else if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME) == 0) {
+            device_data->enables.incremental_present = true;
         }
     }
 }
@@ -5180,6 +5183,42 @@ VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInf
                                      VK_KHR_SWAPCHAIN_EXTENSION_NAME);
 
     skip |= parameter_validation_vkQueuePresentKHR(my_data->report_data, pPresentInfo);
+
+    if (pPresentInfo && pPresentInfo->pNext) {
+        // Verify ext struct
+        struct std_header {
+            VkStructureType sType;
+            const void *pNext;
+        };
+        std_header *pnext = (std_header *)pPresentInfo->pNext;
+        while (pnext) {
+            if (VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR == pnext->sType) {
+                skip |= require_device_extension(my_data, my_data->enables.incremental_present, "vkQueuePresentKHR",
+                                                 VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME);
+                VkPresentRegionsKHR *present_regions = (VkPresentRegionsKHR *)pnext;
+                if (present_regions->swapchainCount != pPresentInfo->swapchainCount) {
+                    skip |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
+                                    __LINE__, INVALID_USAGE, LayerName,
+                                    "QueuePresentKHR(): pPresentInfo->swapchainCount has a value of %i"
+                                    " but VkPresentRegionsKHR extension swapchainCount is %i. These values must be equal.",
+                                    pPresentInfo->swapchainCount, present_regions->swapchainCount);
+                }
+                skip |= validate_struct_pnext(my_data->report_data, "QueuePresentKHR", "pCreateInfo->pNext->pNext", NULL,
+                                              present_regions->pNext, 0, NULL, GeneratedHeaderVersion);
+                skip |= validate_array(my_data->report_data, "QueuePresentKHR", "pCreateInfo->pNext->swapchainCount",
+                                       "pCreateInfo->pNext->pRegions", present_regions->swapchainCount, present_regions->pRegions,
+                                       true, false);
+                for (uint32_t i = 0; i < present_regions->swapchainCount; ++i) {
+                    skip |=
+                        validate_array(my_data->report_data, "QueuePresentKHR", "pCreateInfo->pNext->pRegions[].rectangleCount",
+                                       "pCreateInfo->pNext->pRegions[].pRectangles", present_regions->pRegions[i].rectangleCount,
+                                       present_regions->pRegions[i].pRectangles, true, false);
+                }
+            }
+            pnext = (std_header *)pnext->pNext;
+        }
+    }
+
     if (!skip) {
         result = my_data->dispatch_table.QueuePresentKHR(queue, pPresentInfo);
 

commit c78bb8f84551ddfb3802d18c678500e26e4116cb
Author: Tobin Ehlis <tobine@google.com>
Date:   Fri Jan 13 12:21:07 2017 -0700

    layers: incremental_present rectangle validation
    
    In core_validation verify the offset, extent & layer values for each
    VkRectLayerKHR struct passed into vkQueuePresentKHR() for the
    VK_KHR_incremental_present extension.
    
    Change-Id: I4aa7cbac61afa6f4c9e733bb51cd486aadab5cec

diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index dfed7eb..eea62c4 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -10904,6 +10904,58 @@ VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInf
             }
         }
     }
+    if (pPresentInfo && pPresentInfo->pNext) {
+        // Verify ext struct
+        struct std_header {
+            VkStructureType sType;
+            const void *pNext;
+        };
+        std_header *pnext = (std_header *)pPresentInfo->pNext;
+        while (pnext) {
+            if (VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR == pnext->sType) {
+                VkPresentRegionsKHR *present_regions = (VkPresentRegionsKHR *)pnext;
+                for (uint32_t i = 0; i < present_regions->swapchainCount; ++i) {
+                    auto swapchain_data = GetSwapchainNode(dev_data, pPresentInfo->pSwapchains[i]);
+                    assert(swapchain_data);
+                    VkPresentRegionKHR region = present_regions->pRegions[i];
+                    for (uint32_t j = 0; j < region.rectangleCount; ++j) {
+                        VkRectLayerKHR rect = region.pRectangles[j];
+                        // TODO: Need to update these errors to their unique error ids when available
+                        if ((rect.offset.x + rect.extent.width) > swapchain_data->createInfo.imageExtent.width) {
+                            skip_call |= log_msg(
+                                dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
+                                reinterpret_cast<uint64_t const &>(pPresentInfo->pSwapchains[i]), __LINE__,
+                                DRAWSTATE_SWAPCHAIN_INVALID_IMAGE, "DS", "vkQueuePresentKHR(): For VkPresentRegionKHR down pNext "
+                                                                         "chain, pRegion[%i].pRectangles[%i], the sum of offset.x "
+                                                                         "(%i) and extent.width (%i) is greater than the "
+                                                                         "corresponding swapchain's imageExtent.width (%i).",
+                                i, j, rect.offset.x, rect.extent.width, swapchain_data->createInfo.imageExtent.width);
+                        }
+                        if ((rect.offset.y + rect.extent.height) > swapchain_data->createInfo.imageExtent.height) {
+                            skip_call |= log_msg(
+                                dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
+                                reinterpret_cast<uint64_t const &>(pPresentInfo->pSwapchains[i]), __LINE__,
+                                DRAWSTATE_SWAPCHAIN_INVALID_IMAGE, "DS", "vkQueuePresentKHR(): For VkPresentRegionKHR down pNext "
+                                                                         "chain, pRegion[%i].pRectangles[%i], the sum of offset.y "
+                                                                         "(%i) and extent.height (%i) is greater than the "
+                                                                         "corresponding swapchain's imageExtent.height (%i).",
+                                i, j, rect.offset.y, rect.extent.height, swapchain_data->createInfo.imageExtent.height);
+                        }
+                        if (rect.layer > swapchain_data->createInfo.imageArrayLayers) {
+                            skip_call |= log_msg(
+                                dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
+                                reinterpret_cast<uint64_t const &>(pPresentInfo->pSwapchains[i]), __LINE__,
+                                DRAWSTATE_SWAPCHAIN_INVALID_IMAGE, "DS",
+                                "vkQueuePresentKHR(): For VkPresentRegionKHR down pNext chain, pRegion[%i].pRectangles[%i], the "
+                                "layer (%i) is greater than the corresponding swapchain's imageArrayLayers (%i).",
+                                i, j, rect.layer, swapchain_data->createInfo.imageArrayLayers);
+                        }
+                    }
+                }
+            }
+            pnext = (std_header *)pnext->pNext;
+        }
+    }
 
     if (skip_call) {
         return VK_ERROR_VALIDATION_FAILED_EXT;

commit e0f6861670c68fae101f1b2e1b56ea954f3be19a
Author: Mark Lobodzinski <mark@lunarg.com>
Date:   Mon Apr 3 08:22:04 2017 -0600

    header: Update to 1.0.46 Vulkan version
    
    - updated include/vulkan/vulkan.h
    - updated scripts/vk.xml
    - updated layers json files
    - updated tests json files
    - fixed include/vulkan/vulkan.hpp -- see Note
    
    Note: The Vulkan.hpp generator asserted when processing the 1.0.46 header
    files. Added a temporary workaround for this issue, but it may affect
    use of the vulkan.hpp header file.
    
    Change-Id: Iab296bf2004fbf6099baaab148994b15b0392381

diff --git a/include/vulkan/vulkan.h b/include/vulkan/vulkan.h
index a235861..ef0c246 100644
--- a/include/vulkan/vulkan.h
+++ b/include/vulkan/vulkan.h
@@ -43,7 +43,7 @@ extern "C" {
 #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
 #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
 // Version of this file
-#define VK_HEADER_VERSION 45
+#define VK_HEADER_VERSION 46
 
 
 #define VK_NULL_HANDLE 0
@@ -281,6 +281,7 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHX = 1000078002,
     VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHX = 1000079000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
+    VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
     VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = 1000085000,
     VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
     VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
@@ -4004,6 +4005,30 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR(
     const VkWriteDescriptorSet*                 pDescriptorWrites);
 #endif
 
+#define VK_KHR_incremental_present 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
+
+typedef struct VkRectLayerKHR {
+    VkOffset2D    offset;
+    VkExtent2D    extent;
+    uint32_t      layer;
+} VkRectLayerKHR;
+
+typedef struct VkPresentRegionKHR {
+    uint32_t                 rectangleCount;
+    const VkRectLayerKHR*    pRectangles;
+} VkPresentRegionKHR;
+
+typedef struct VkPresentRegionsKHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    uint32_t                     swapchainCount;
+    const VkPresentRegionKHR*    pRegions;
+} VkPresentRegionsKHR;
+
+
+
 #define VK_KHR_descriptor_update_template 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplateKHR)
 
@@ -4079,7 +4104,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
 #define VK_EXT_debug_report 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
 
-#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  5
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION  6
 #define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
 #define VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
 
@@ -4118,6 +4143,7 @@ typedef enum VkDebugReportObjectTypeEXT {
     VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
     VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = 31,
     VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32,
+    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = 1000085000,
     VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
     VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT,
     VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
@@ -4899,7 +4925,7 @@ typedef struct VkExportMemoryAllocateInfoKHX {
 
 
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
+#ifdef VK_USE_PLATFORM_WIN32_KHX
 #define VK_KHX_external_memory_win32 1
 #define VK_KHX_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
 #define VK_KHX_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHX_external_memory_win32"
@@ -4942,7 +4968,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHX(
     HANDLE                                      handle,
     VkMemoryWin32HandlePropertiesKHX*           pMemoryWin32HandleProperties);
 #endif
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
+#endif /* VK_USE_PLATFORM_WIN32_KHX */
 
 #define VK_KHX_external_memory_fd 1
 #define VK_KHX_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
@@ -5676,7 +5702,7 @@ typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
 
 typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
     VkStructureType    sType;
-    const void*        pNext;
+    void*              pNext;
     uint32_t           maxDiscardRectangles;
 } VkPhysicalDeviceDiscardRectanglePropertiesEXT;
 
diff --git a/include/vulkan/vulkan.hpp b/include/vulkan/vulkan.hpp
index 102ee8c..0199195 100644
--- a/include/vulkan/vulkan.hpp
+++ b/include/vulkan/vulkan.hpp
@@ -42,7 +42,7 @@
 # include <vector>
 #endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
 
-static_assert( VK_HEADER_VERSION ==  45 , "Wrong VK_HEADER_VERSION!" );
+static_assert( VK_HEADER_VERSION ==  46 , "Wrong VK_HEADER_VERSION!" );
 
 // 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
 // To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
@@ -4788,6 +4788,119 @@ namespace vk
   };
   static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), "struct and wrapper have different size!" );
 
+  struct RectLayerKHR
+  {
+    RectLayerKHR( Offset2D offset_ = Offset2D(), Extent2D extent_ = Extent2D(), uint32_t layer_ = 0 )
+      : offset( offset_ )
+      , extent( extent_ )
+      , layer( layer_ )
+    {
+    }
+
+    RectLayerKHR( VkRectLayerKHR const & rhs )
+    {
+      memcpy( this, &rhs, sizeof(RectLayerKHR) );
+    }
+
+    RectLayerKHR& operator=( VkRectLayerKHR const & rhs )
+    {
+      memcpy( this, &rhs, sizeof(RectLayerKHR) );
+      return *this;
+    }
+
+    RectLayerKHR& setOffset( Offset2D offset_ )
+    {
+      offset = offset_;
+      return *this;
+    }
+
+    RectLayerKHR& setExtent( Extent2D extent_ )
+    {
+      extent = extent_;
+      return *this;
+    }
+
+    RectLayerKHR& setLayer( uint32_t layer_ )
+    {
+      layer = layer_;
+      return *this;
+    }
+
+    operator const VkRectLayerKHR&() const
+    {
+      return *reinterpret_cast<const VkRectLayerKHR*>(this);
+    }
+
+    bool operator==( RectLayerKHR const& rhs ) const
+    {
+      return ( offset == rhs.offset )
+          && ( extent == rhs.extent )
+          && ( layer == rhs.layer );
+    }
+
+    bool operator!=( RectLayerKHR const& rhs ) const
+    {
+      return !operator==( rhs );
+    }
+
+    Offset2D offset;
+    Extent2D extent;
+    uint32_t layer;
+  };
+  static_assert( sizeof( RectLayerKHR ) == sizeof( VkRectLayerKHR ), "struct and wrapper have different size!" );
+
+  struct PresentRegionKHR
+  {
+    PresentRegionKHR( uint32_t rectangleCount_ = 0, const RectLayerKHR* pRectangles_ = nullptr )
+      : rectangleCount( rectangleCount_ )
+      , pRectangles( pRectangles_ )
+    {
+    }
+
+    PresentRegionKHR( VkPresentRegionKHR const & rhs )
+    {
+      memcpy( this, &rhs, sizeof(PresentRegionKHR) );
+    }
+
+    PresentRegionKHR& operator=( VkPresentRegionKHR const & rhs )
+    {
+      memcpy( this, &rhs, sizeof(PresentRegionKHR) );
+      return *this;
+    }
+
+    PresentRegionKHR& setRectangleCount( uint32_t rectangleCount_ )
+    {
+      rectangleCount = rectangleCount_;
+      return *this;
+    }
+
+    PresentRegionKHR& setPRectangles( const RectLayerKHR* pRectangles_ )
+    {
+      pRectangles = pRectangles_;
+      return *this;
+    }
+
+    operator const VkPresentRegionKHR&() const
+    {
+      return *reinterpret_cast<const VkPresentRegionKHR*>(this);
+    }
+
+    bool operator==( PresentRegionKHR const& rhs ) const
+    {
+      return ( rectangleCount == rhs.rectangleCount )
+          && ( pRectangles == rhs.pRectangles );
+    }
+
+    bool operator!=( PresentRegionKHR const& rhs ) const
+    {
+      return !operator==( rhs );
+    }
+
+    uint32_t rectangleCount;
+    const RectLayerKHR* pRectangles;
+  };
+  static_assert( sizeof( PresentRegionKHR ) == sizeof( VkPresentRegionKHR ), "struct and wrapper have different size!" );
+
   struct XYColorEXT
   {
     XYColorEXT( float x_ = 0, float y_ = 0 )
@@ -6249,6 +6362,7 @@ namespace vk
     eD3D12FenceSubmitInfoKHX = VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHX,
     eImportSemaphoreFdInfoKHX = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHX,
     ePhysicalDevicePushDescriptorPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR,
+    ePresentRegionsKHR = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR,
     eDescriptorUpdateTemplateCreateInfoKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR,
     eObjectTableCreateInfoNVX = VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX,
     eIndirectCommandsLayoutCreateInfoNVX = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX,
@@ -10030,6 +10144,73 @@ namespace vk
   };
   static_assert( sizeof( PhysicalDevicePushDescriptorPropertiesKHR ) == sizeof( VkPhysicalDevicePushDescriptorPropertiesKHR ), "struct and wrapper have different size!" );
 
+  struct PresentRegionsKHR
+  {
+    PresentRegionsKHR( uint32_t swapchainCount_ = 0, const PresentRegionKHR* pRegions_ = nullptr )
+      : sType( StructureType::ePresentRegionsKHR )
+      , pNext( nullptr )
+      , swapchainCount( swapchainCount_ )
+      , pRegions( pRegions_ )
+    {
+    }
+
+    PresentRegionsKHR( VkPresentRegionsKHR const & rhs )
+    {
+      memcpy( this, &rhs, sizeof(PresentRegionsKHR) );
+    }
+
+    PresentRegionsKHR& operator=( VkPresentRegionsKHR const & rhs )
+    {
+      memcpy( this, &rhs, sizeof(PresentRegionsKHR) );
+      return *this;
+    }
+
+    PresentRegionsKHR& setPNext( const void* pNext_ )
+    {
+      pNext = pNext_;
+      return *this;
+    }
+
+    PresentRegionsKHR& setSwapchainCount( uint32_t swapchainCount_ )
+    {
+      swapchainCount = swapchainCount_;
+      return *this;
+    }
+
+    PresentRegionsKHR& setPRegions( const PresentRegionKHR* pRegions_ )
+    {
+      pRegions = pRegions_;
+      return *this;
+    }
+
+    operator const VkPresentRegionsKHR&() const
+    {
+      return *reinterpret_cast<const VkPresentRegionsKHR*>(this);
+    }
+
+    bool operator==( PresentRegionsKHR const& rhs ) const
+    {
+      return ( sType == rhs.sType )
+          && ( pNext == rhs.pNext )
+          && ( swapchainCount == rhs.swapchainCount )
+          && ( pRegions == rhs.pRegions );
+    }
+
+    bool operator!=( PresentRegionsKHR const& rhs ) const
+    {
+      return !operator==( rhs );
+    }
+
+  private:
+    StructureType sType;
+
+  public:
+    const void* pNext;
+    uint32_t swapchainCount;
+    const PresentRegionKHR* pRegions;
+  };
+  static_assert( sizeof( PresentRegionsKHR ) == sizeof( VkPresentRegionsKHR ), "struct and wrapper have different size!" );
+
   struct PhysicalDeviceIDPropertiesKHX
   {
     operator const VkPhysicalDeviceIDPropertiesKHX&() const
@@ -10064,7 +10245,7 @@ namespace vk
   };
   static_assert( sizeof( PhysicalDeviceIDPropertiesKHX ) == sizeof( VkPhysicalDeviceIDPropertiesKHX ), "struct and wrapper have different size!" );
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
+#ifdef VK_USE_PLATFORM_WIN32_KHX
   struct ExportMemoryWin32HandleInfoKHX
   {
     ExportMemoryWin32HandleInfoKHX( const SECURITY_ATTRIBUTES* pAttributes_ = nullptr, DWORD dwAccess_ = 0, LPCWSTR name_ = 0 )
@@ -10140,9 +10321,9 @@ namespace vk
     LPCWSTR name;
   };
   static_assert( sizeof( ExportMemoryWin32HandleInfoKHX ) == sizeof( VkExportMemoryWin32HandleInfoKHX ), "struct and wrapper have different size!" );
-#endif /*VK_USE_PLATFORM_WIN32_KHR*/
+#endif /*VK_USE_PLATFORM_WIN32_KHX*/
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
+#ifdef VK_USE_PLATFORM_WIN32_KHX
   struct MemoryWin32HandlePropertiesKHX
   {
     operator const VkMemoryWin32HandlePropertiesKHX&() const
@@ -10170,7 +10351,7 @@ namespace vk
     uint32_t memoryTypeBits;
   };
   static_assert( sizeof( MemoryWin32HandlePropertiesKHX ) == sizeof( VkMemoryWin32HandlePropertiesKHX ), "struct and wrapper have different size!" );
-#endif /*VK_USE_PLATFORM_WIN32_KHR*/
+#endif /*VK_USE_PLATFORM_WIN32_KHX*/
 
   struct MemoryFdPropertiesKHX
   {
@@ -11839,7 +12020,7 @@ namespace vk
       return *this;
     }
 
-    PhysicalDeviceDiscardRectanglePropertiesEXT& setPNext( const void* pNext_ )
+    PhysicalDeviceDiscardRectanglePropertiesEXT& setPNext( void* pNext_ )
     {
       pNext = pNext_;
       return *this;
@@ -11872,7 +12053,7 @@ namespace vk
     StructureType sType;
 
   public:
-    const void* pNext;
+    void* pNext;
     uint32_t maxDiscardRectangles;
   };
   static_assert( sizeof( PhysicalDeviceDiscardRectanglePropertiesEXT ) == sizeof( VkPhysicalDeviceDiscardRectanglePropertiesEXT ), "struct and wrapper have different size!" );
@@ -17780,7 +17961,8 @@ namespace vk
     eDisplayKhr = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT,
     eDisplayModeKhr = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT,
     eObjectTableNvx = VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT,
-    eIndirectCommandsLayoutNvx = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT
+    eIndirectCommandsLayoutNvx = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT,
+    eDescriptorUpdateTemplateKhrKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
   };
 
   struct DebugMarkerObjectNameInfoEXT
@@ -19607,7 +19789,7 @@ namespace vk
   };
   static_assert( sizeof( ExportMemoryAllocateInfoKHX ) == sizeof( VkExportMemoryAllocateInfoKHX ), "struct and wrapper have different size!" );
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
+#ifdef VK_USE_PLATFORM_WIN32_KHX
   struct ImportMemoryWin32HandleInfoKHX
   {
     ImportMemoryWin32HandleInfoKHX( ExternalMemoryHandleTypeFlagBitsKHX handleType_ = ExternalMemoryHandleTypeFlagBitsKHX::eOpaqueFd, HANDLE handle_ = 0 )
@@ -19674,7 +19856,7 @@ namespace vk
     HANDLE handle;
   };
   static_assert( sizeof( ImportMemoryWin32HandleInfoKHX ) == sizeof( VkImportMemoryWin32HandleInfoKHX ), "struct and wrapper have different size!" );
-#endif /*VK_USE_PLATFORM_WIN32_KHR*/
+#endif /*VK_USE_PLATFORM_WIN32_KHX*/
 


Reply to: