.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 <tjaal...@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 <tjaal...@debian.org> Sun, 09 Apr 2017 11:19:11 +0300 + -- Timo Aaltonen <tjaal...@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 <tjaal...@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 <tjaal...@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 <tjaal...@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 <tjaal...@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 <tjaal...@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.latino...@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 <le...@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 <m...@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 <ianelli...@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 = ®ion, }; present.pNext = ®ions; - DbgMsg("present = %p, present.pNext = %p, regions = %p, regions.pNext = %p\n", - &present, - present.pNext, - ®ions, - 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", - ®ions, regions.pRegions, regions.pRegions->pRectangles); } if (demo->VK_GOOGLE_display_timing_enabled) { commit 02f7d213d30762f60b3f15207e497574080ee038 Author: Ian Elliott <ianelli...@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 = ®ion, + }; + present.pNext = ®ions; + DbgMsg("present = %p, present.pNext = %p, regions = %p, regions.pNext = %p\n", + &present, + present.pNext, + ®ions, + 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", + ®ions, 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 <tob...@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 <tob...@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 <m...@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*/