vulkan: Changes to 'debian-unstable'
.clang-format | 5
.travis.yml | 4
BUILD.md | 2
CMakeLists.txt | 57
CONTRIBUTING.md | 15
common/android_util.cpp | 31
common/android_util.h | 6
common/vulkan_wrapper.cpp | 113
common/vulkan_wrapper.h | 3
debian/changelog | 7
debian/patches/disable-mir.diff | 4
debian/patches/use-mxgot-for-mips64.patch | 8
demos/CMakeLists.txt | 2
demos/android/include/cube.frag.h | 56
demos/android/include/cube.vert.h | 139
demos/android/include/lunarg.ppm.h |25750 ++++--------
demos/cube.c | 380
demos/cube.cpp | 1676
demos/linmath.h | 126
demos/smoke/Game.cpp | 3
demos/smoke/Game.h | 16
demos/smoke/Helpers.h | 31
demos/smoke/Main.cpp | 24
demos/smoke/Meshes.cpp | 287
demos/smoke/Meshes.h | 6
demos/smoke/Meshes.teapot.h | 1152
demos/smoke/Shell.cpp | 180
demos/smoke/Shell.h | 30
demos/smoke/ShellAndroid.cpp | 162
demos/smoke/ShellAndroid.h | 12
demos/smoke/ShellWayland.cpp | 119
demos/smoke/ShellWayland.h | 23
demos/smoke/ShellWin32.cpp | 140
demos/smoke/ShellWin32.h | 13
demos/smoke/ShellXcb.cpp | 176
demos/smoke/ShellXcb.h | 6
demos/smoke/Simulation.cpp | 175
demos/smoke/Simulation.h | 14
demos/smoke/Smoke.cpp | 312
demos/smoke/Smoke.h | 10
demos/smoke/android/src/main/jni/Smoke.frag.h | 42
demos/smoke/android/src/main/jni/Smoke.push_constant.vert.h | 251
demos/smoke/android/src/main/jni/Smoke.vert.h | 252
demos/vulkaninfo.c | 376
external_revisions/glslang_giturl | 1
external_revisions/glslang_revision | 2
external_revisions/spirv-headers_giturl | 1
external_revisions/spirv-headers_revision | 2
external_revisions/spirv-tools_giturl | 1
external_revisions/spirv-tools_revision | 2
include/vulkan/vk_layer.h | 269
include/vulkan/vk_platform.h | 2
include/vulkan/vulkan.h | 1013
include/vulkan/vulkan.hpp |22269 ++++++----
layers/.clang-format | 7
layers/CMakeLists.txt | 56
layers/README.md | 7
layers/buffer_validation.cpp | 2847 +
layers/buffer_validation.h | 229
layers/core_validation.cpp | 8451 +--
layers/core_validation.h | 99
layers/core_validation_error_enums.h | 12
layers/core_validation_types.h | 299
layers/descriptor_sets.cpp | 805
layers/descriptor_sets.h | 45
layers/image.cpp | 1471
layers/image.h | 68
layers/linux/VkLayer_core_validation.json | 2
layers/linux/VkLayer_image.json | 17
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 | 2011
layers/object_tracker.h | 157
layers/parameter_name.h | 14
layers/parameter_validation.cpp | 2327 -
layers/parameter_validation_utils.h | 102
layers/spec.py | 43
layers/swapchain.cpp | 159
layers/swapchain.h | 88
layers/threading.cpp | 170
layers/threading.h | 102
layers/unique_objects.cpp | 64
layers/unique_objects.h | 59
layers/vk_layer_config.cpp | 46
layers/vk_layer_config.h | 2
layers/vk_layer_data.h | 14
layers/vk_layer_extension_utils.h | 4
layers/vk_layer_logging.h | 24
layers/vk_layer_settings.txt | 5
layers/vk_layer_table.cpp | 21
layers/vk_layer_utils.cpp | 663
layers/vk_layer_utils.h | 19
layers/vk_validation_error_database.txt | 892
layers/vk_validation_error_messages.h | 886
layers/vk_validation_stats.py | 29
layers/windows/VkLayer_core_validation.json | 2
layers/windows/VkLayer_image.json | 17
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 | 28
loader/LoaderAndLayerInterface.md | 25
loader/cJSON.c | 680
loader/cJSON.h | 56
loader/debug_report.c | 254
loader/debug_report.h | 220
loader/dev_ext_trampoline.c | 5
loader/dirent_on_windows.c | 6
loader/extensions.c | 850
loader/extensions.h | 117
loader/gpa_helper.h | 439
loader/loader.c | 3344 -
loader/loader.h | 508
loader/murmurhash.c | 32
loader/phys_dev_ext.c | 41
loader/table_ops.h | 935
loader/trampoline.c | 1388
loader/vk_loader_layer.h | 1
loader/vk_loader_platform.h | 220
loader/wsi.c | 1374
loader/wsi.h | 190
scripts/cgenerator.py | 345
scripts/determine_vs_version.py | 2
scripts/dispatch_table_generator.py | 197
scripts/dispatch_table_helper_generator.py | 197
scripts/generator.py | 2
scripts/helper_file_generator.py | 8
scripts/loader_extension_generator.py | 1470
scripts/lvl_genvk.py | 86
scripts/parameter_validation_generator.py | 37
scripts/reg.py | 2
scripts/threading_generator.py | 75
scripts/unique_objects_generator.py | 33
scripts/vk.xml | 1150
tests/.clang-format | 7
tests/CMakeLists.txt | 10
tests/icd-spv.h | 2
tests/layer_validation_tests.cpp | 5896 +-
tests/layers/CMakeLists.txt | 19
tests/layers/linux/VkLayer_test.json | 2
tests/layers/linux/VkLayer_wrap_objects.json | 2
tests/layers/test.cpp | 8
tests/layers/windows/VkLayer_test.json | 2
tests/layers/windows/VkLayer_wrap_objects.json | 2
tests/loader_validation_tests.cpp | 170
tests/run_wrap_objects_tests.sh | 2
tests/test_common.h | 26
tests/test_environment.cpp | 9
tests/test_environment.h | 6
tests/vk_layer_settings.txt | 2
tests/vkrenderframework.cpp | 309
tests/vkrenderframework.h | 69
tests/vktestbinding.cpp | 56
tests/vktestbinding.h | 98
tests/vktestframework.cpp | 366
tests/vktestframework.h | 8
tests/vktestframeworkandroid.cpp | 1
tests/vktestframeworkandroid.h | 4
update_external_sources.bat | 38
update_external_sources.sh | 17
165 files changed, 50187 insertions(+), 49374 deletions(-)
New commits:
commit 31eca23022b360945651ee3ee4733e0f48674799
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Thu Mar 9 10:57:37 2017 +0200
release to experimental
diff --git a/debian/changelog b/debian/changelog
index f7192ea..6dcb551 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,6 @@
-vulkan (1.0.42.0+dfsg1-1) UNRELEASED; urgency=medium
+vulkan (1.0.42.0+dfsg1-1) experimental; urgency=medium
- * New upstream release.
+ * New upstream release. (Closes: #857185)
* Refresh patches.
-- Timo Aaltonen <tjaalton@debian.org> Thu, 09 Mar 2017 10:38:21 +0200
commit 0267ee27e11281d2b02be238d5fa99c29efe9075
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Thu Mar 9 10:49:16 2017 +0200
Refresh patches.
diff --git a/debian/changelog b/debian/changelog
index 8cceecb..f7192ea 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
vulkan (1.0.42.0+dfsg1-1) UNRELEASED; urgency=medium
* New upstream release.
+ * Refresh patches.
-- Timo Aaltonen <tjaalton@debian.org> Thu, 09 Mar 2017 10:38:21 +0200
diff --git a/debian/patches/disable-mir.diff b/debian/patches/disable-mir.diff
index 23dc0ac..a47ca7e 100644
--- a/debian/patches/disable-mir.diff
+++ b/debian/patches/disable-mir.diff
@@ -1,11 +1,11 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -20,7 +20,7 @@
+@@ -25,7 +25,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON)
option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON)
option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON)
- option(BUILD_WSI_MIR_SUPPORT "Build Mir WSI support" ON)
+ option(BUILD_WSI_MIR_SUPPORT "Build Mir WSI support" OFF)
- set(DEMOS_WSI_SELECTION "XCB" CACHE STRING "Select WSI target for demos")
+ set(DEMOS_WSI_SELECTION "XCB" CACHE STRING "Select WSI target for demos (XCB, XLIB, WAYLAND, MIR, DISPLAY)")
if (BUILD_WSI_XCB_SUPPORT)
diff --git a/debian/patches/use-mxgot-for-mips64.patch b/debian/patches/use-mxgot-for-mips64.patch
index 4d3b0d4..d915fb0 100644
--- a/debian/patches/use-mxgot-for-mips64.patch
+++ b/debian/patches/use-mxgot-for-mips64.patch
@@ -3,7 +3,7 @@ Author: Dejan Latinovic <Dejan.Latinovic@imgtec.com>
--- a/layers/CMakeLists.txt
+++ b/layers/CMakeLists.txt
-@@ -133,6 +133,12 @@
+@@ -132,6 +132,12 @@ else()
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare")
endif()
@@ -13,6 +13,6 @@ Author: Dejan Latinovic <Dejan.Latinovic@imgtec.com>
+ endif()
+endif()
+
- add_custom_target(generate_vk_helper_files DEPENDS
- vk_enum_string_helper.h
- vk_struct_size_helper.h
+ run_vk_xml_generate(threading_generator.py thread_check.h)
+ run_vk_xml_generate(parameter_validation_generator.py parameter_validation.h)
+ run_vk_xml_generate(unique_objects_generator.py unique_objects_wrappers.h)
commit 91909b1a7c0720f19a1e619a64ed18bd0b14063c
Author: Timo Aaltonen <tjaalton@debian.org>
Date: Thu Mar 9 10:49:01 2017 +0200
update the changelog
diff --git a/debian/changelog b/debian/changelog
index a0f81b8..8cceecb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+vulkan (1.0.42.0+dfsg1-1) UNRELEASED; urgency=medium
+
+ * New upstream release.
+
+ -- Timo Aaltonen <tjaalton@debian.org> Thu, 09 Mar 2017 10:38:21 +0200
+
vulkan (1.0.39.0+dfsg1-1) unstable; urgency=medium
[ Andreas Boll ]
commit f282a611041d1a677d62ccb0afd770997cab5fda
Author: Cody Northrop <cnorthrop@google.com>
Date: Tue Feb 28 13:09:46 2017 -0700
build: More Android fixes
diff --git a/build-android/jni/Android.mk b/build-android/jni/Android.mk
index 678133a..0c8f10d 100644
--- a/build-android/jni/Android.mk
+++ b/build-android/jni/Android.mk
@@ -24,6 +24,7 @@ LOCAL_SRC_FILES += $(LAYER_DIR)/common/vk_layer_config.cpp
LOCAL_SRC_FILES += $(LAYER_DIR)/common/vk_layer_extension_utils.cpp
LOCAL_SRC_FILES += $(LAYER_DIR)/common/vk_layer_utils.cpp
LOCAL_C_INCLUDES += $(SRC_DIR)/include \
+ $(LAYER_DIR)/include \
$(SRC_DIR)/layers \
$(SRC_DIR)/loader
LOCAL_CPPFLAGS += -DVK_USE_PLATFORM_ANDROID_KHR -fvisibility=hidden
@@ -177,6 +178,7 @@ LOCAL_SRC_FILES += $(SRC_DIR)/tests/layer_validation_tests.cpp \
$(SRC_DIR)/tests/vkrenderframework.cpp \
$(SRC_DIR)/common/vulkan_wrapper.cpp
LOCAL_C_INCLUDES += $(SRC_DIR)/include \
+ $(LAYER_DIR)/include \
$(SRC_DIR)/layers \
$(SRC_DIR)/libs \
$(SRC_DIR)/common \
@@ -199,6 +201,7 @@ LOCAL_SRC_FILES += $(SRC_DIR)/tests/layer_validation_tests.cpp \
$(SRC_DIR)/tests/vkrenderframework.cpp \
$(SRC_DIR)/common/vulkan_wrapper.cpp
LOCAL_C_INCLUDES += $(SRC_DIR)/include \
+ $(LAYER_DIR)/include \
$(SRC_DIR)/layers \
$(SRC_DIR)/libs \
$(SRC_DIR)/common \
commit bbbc270ee0fd1ff50842ce35729c4d6447614fc4
Author: Mark Young <marky@lunarg.com>
Date: Tue Feb 28 12:28:38 2017 -0700
build: Fix android build
Add new generated dependencies.
Change-Id: I0386a83be2d140f83e6bf3bd3ef3eb18c2104c37
diff --git a/build-android/android-generate.bat b/build-android/android-generate.bat
index 08892c7..fb5e393 100644
--- a/build-android/android-generate.bat
+++ b/build-android/android-generate.bat
@@ -29,6 +29,7 @@ py -3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml vk_dispatc
py -3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml thread_check.h
py -3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml parameter_validation.h
py -3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml unique_objects_wrappers.h
+py -3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml vk_layer_dispatch_table.h
cd ../..
copy /Y ..\layers\vk_layer_config.cpp generated\common\
diff --git a/build-android/android-generate.sh b/build-android/android-generate.sh
index d53ae6f..dcd6162 100755
--- a/build-android/android-generate.sh
+++ b/build-android/android-generate.sh
@@ -30,6 +30,9 @@ mkdir -p generated/include generated/common
( cd generated/include; python3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml thread_check.h )
( cd generated/include; python3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml parameter_validation.h )
( cd generated/include; python3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml unique_objects_wrappers.h )
+( cd generated/include; python3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml vk_loader_extensions.h )
+( cd generated/include; python3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml vk_loader_extensions.c )
+( cd generated/include; python3 ../../../scripts/lvl_genvk.py -registry ../../../scripts/vk.xml vk_layer_dispatch_table.h )
cp -f ../layers/vk_layer_config.cpp generated/common/
cp -f ../layers/vk_layer_extension_utils.cpp generated/common/
commit 8a826b49f52eb76c4bc630c94e1570d6e732afc6
Author: Mark Young <marky@lunarg.com>
Date: Tue Feb 28 10:17:18 2017 -0700
loader: Remove floating file
I had removed the need for loader/table_ops.h in my loader
automatic generation changes, but forgot to remove the file.
Change-Id: Ide46609d9eda354b712844782b97af6f1cc09ef0
diff --git a/loader/table_ops.h b/loader/table_ops.h
deleted file mode 100644
index cb4f622..0000000
--- a/loader/table_ops.h
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- *
- * Copyright (c) 2015-2016 The Khronos Group Inc.
- * Copyright (c) 2015-2016 Valve Corporation
- * Copyright (c) 2015-2016 LunarG, Inc.
- * Copyright (C) 2016 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Author: Courtney Goeltzenleuchter <courtney@lunarg.com>
- * Author: Jon Ashburn <jon@lunarg.com>
- * Author: Ian Elliott <ian@LunarG.com>
- * Author: Tony Barbour <tony@LunarG.com>
- */
-
-#include <vulkan/vulkan.h>
-#include <vulkan/vk_layer.h>
-#include <string.h>
-#include "loader.h"
-#include "vk_loader_platform.h"
-
-static VkResult VKAPI_CALL vkDevExtError(VkDevice dev) {
- struct loader_device *found_dev;
- // The device going in is a trampoline device
- struct loader_icd_term *icd_term = loader_get_icd_and_device(dev, &found_dev, NULL);
-
- if (icd_term)
- loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "Bad destination in loader trampoline dispatch,"
- "Are layers and extensions that you are calling enabled?");
- return VK_ERROR_EXTENSION_NOT_PRESENT;
-}
-
-static inline void loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa,
- VkDevice dev) {
- VkLayerDispatchTable *table = &dev_table->core_dispatch;
- for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) dev_table->ext_dispatch.dev_ext[i] = (PFN_vkDevExt)vkDevExtError;
-
- table->GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)gpa(dev, "vkGetDeviceProcAddr");
- table->DestroyDevice = (PFN_vkDestroyDevice)gpa(dev, "vkDestroyDevice");
- table->GetDeviceQueue = (PFN_vkGetDeviceQueue)gpa(dev, "vkGetDeviceQueue");
- table->QueueSubmit = (PFN_vkQueueSubmit)gpa(dev, "vkQueueSubmit");
- table->QueueWaitIdle = (PFN_vkQueueWaitIdle)gpa(dev, "vkQueueWaitIdle");
- table->DeviceWaitIdle = (PFN_vkDeviceWaitIdle)gpa(dev, "vkDeviceWaitIdle");
- table->AllocateMemory = (PFN_vkAllocateMemory)gpa(dev, "vkAllocateMemory");
- table->FreeMemory = (PFN_vkFreeMemory)gpa(dev, "vkFreeMemory");
- table->MapMemory = (PFN_vkMapMemory)gpa(dev, "vkMapMemory");
- table->UnmapMemory = (PFN_vkUnmapMemory)gpa(dev, "vkUnmapMemory");
- table->FlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)gpa(dev, "vkFlushMappedMemoryRanges");
- table->InvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)gpa(dev, "vkInvalidateMappedMemoryRanges");
- table->GetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)gpa(dev, "vkGetDeviceMemoryCommitment");
- table->GetImageSparseMemoryRequirements =
- (PFN_vkGetImageSparseMemoryRequirements)gpa(dev, "vkGetImageSparseMemoryRequirements");
- table->GetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)gpa(dev, "vkGetBufferMemoryRequirements");
- table->GetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)gpa(dev, "vkGetImageMemoryRequirements");
- table->BindBufferMemory = (PFN_vkBindBufferMemory)gpa(dev, "vkBindBufferMemory");
- table->BindImageMemory = (PFN_vkBindImageMemory)gpa(dev, "vkBindImageMemory");
- table->QueueBindSparse = (PFN_vkQueueBindSparse)gpa(dev, "vkQueueBindSparse");
- table->CreateFence = (PFN_vkCreateFence)gpa(dev, "vkCreateFence");
- table->DestroyFence = (PFN_vkDestroyFence)gpa(dev, "vkDestroyFence");
- table->ResetFences = (PFN_vkResetFences)gpa(dev, "vkResetFences");
- table->GetFenceStatus = (PFN_vkGetFenceStatus)gpa(dev, "vkGetFenceStatus");
- table->WaitForFences = (PFN_vkWaitForFences)gpa(dev, "vkWaitForFences");
- table->CreateSemaphore = (PFN_vkCreateSemaphore)gpa(dev, "vkCreateSemaphore");
- table->DestroySemaphore = (PFN_vkDestroySemaphore)gpa(dev, "vkDestroySemaphore");
- table->CreateEvent = (PFN_vkCreateEvent)gpa(dev, "vkCreateEvent");
- table->DestroyEvent = (PFN_vkDestroyEvent)gpa(dev, "vkDestroyEvent");
- table->GetEventStatus = (PFN_vkGetEventStatus)gpa(dev, "vkGetEventStatus");
- table->SetEvent = (PFN_vkSetEvent)gpa(dev, "vkSetEvent");
- table->ResetEvent = (PFN_vkResetEvent)gpa(dev, "vkResetEvent");
- table->CreateQueryPool = (PFN_vkCreateQueryPool)gpa(dev, "vkCreateQueryPool");
- table->DestroyQueryPool = (PFN_vkDestroyQueryPool)gpa(dev, "vkDestroyQueryPool");
- table->GetQueryPoolResults = (PFN_vkGetQueryPoolResults)gpa(dev, "vkGetQueryPoolResults");
- table->CreateBuffer = (PFN_vkCreateBuffer)gpa(dev, "vkCreateBuffer");
- table->DestroyBuffer = (PFN_vkDestroyBuffer)gpa(dev, "vkDestroyBuffer");
- table->CreateBufferView = (PFN_vkCreateBufferView)gpa(dev, "vkCreateBufferView");
- table->DestroyBufferView = (PFN_vkDestroyBufferView)gpa(dev, "vkDestroyBufferView");
- table->CreateImage = (PFN_vkCreateImage)gpa(dev, "vkCreateImage");
- table->DestroyImage = (PFN_vkDestroyImage)gpa(dev, "vkDestroyImage");
- table->GetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)gpa(dev, "vkGetImageSubresourceLayout");
- table->CreateImageView = (PFN_vkCreateImageView)gpa(dev, "vkCreateImageView");
- table->DestroyImageView = (PFN_vkDestroyImageView)gpa(dev, "vkDestroyImageView");
- table->CreateShaderModule = (PFN_vkCreateShaderModule)gpa(dev, "vkCreateShaderModule");
- table->DestroyShaderModule = (PFN_vkDestroyShaderModule)gpa(dev, "vkDestroyShaderModule");
- table->CreatePipelineCache = (PFN_vkCreatePipelineCache)gpa(dev, "vkCreatePipelineCache");
- table->DestroyPipelineCache = (PFN_vkDestroyPipelineCache)gpa(dev, "vkDestroyPipelineCache");
- table->GetPipelineCacheData = (PFN_vkGetPipelineCacheData)gpa(dev, "vkGetPipelineCacheData");
- table->MergePipelineCaches = (PFN_vkMergePipelineCaches)gpa(dev, "vkMergePipelineCaches");
- table->CreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)gpa(dev, "vkCreateGraphicsPipelines");
- table->CreateComputePipelines = (PFN_vkCreateComputePipelines)gpa(dev, "vkCreateComputePipelines");
- table->DestroyPipeline = (PFN_vkDestroyPipeline)gpa(dev, "vkDestroyPipeline");
- table->CreatePipelineLayout = (PFN_vkCreatePipelineLayout)gpa(dev, "vkCreatePipelineLayout");
- table->DestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)gpa(dev, "vkDestroyPipelineLayout");
- table->CreateSampler = (PFN_vkCreateSampler)gpa(dev, "vkCreateSampler");
- table->DestroySampler = (PFN_vkDestroySampler)gpa(dev, "vkDestroySampler");
- table->CreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)gpa(dev, "vkCreateDescriptorSetLayout");
- table->DestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)gpa(dev, "vkDestroyDescriptorSetLayout");
- table->CreateDescriptorPool = (PFN_vkCreateDescriptorPool)gpa(dev, "vkCreateDescriptorPool");
- table->DestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)gpa(dev, "vkDestroyDescriptorPool");
- table->ResetDescriptorPool = (PFN_vkResetDescriptorPool)gpa(dev, "vkResetDescriptorPool");
- table->AllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)gpa(dev, "vkAllocateDescriptorSets");
- table->FreeDescriptorSets = (PFN_vkFreeDescriptorSets)gpa(dev, "vkFreeDescriptorSets");
- table->UpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)gpa(dev, "vkUpdateDescriptorSets");
- table->CreateFramebuffer = (PFN_vkCreateFramebuffer)gpa(dev, "vkCreateFramebuffer");
- table->DestroyFramebuffer = (PFN_vkDestroyFramebuffer)gpa(dev, "vkDestroyFramebuffer");
- table->CreateRenderPass = (PFN_vkCreateRenderPass)gpa(dev, "vkCreateRenderPass");
- table->DestroyRenderPass = (PFN_vkDestroyRenderPass)gpa(dev, "vkDestroyRenderPass");
- table->GetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)gpa(dev, "vkGetRenderAreaGranularity");
- table->CreateCommandPool = (PFN_vkCreateCommandPool)gpa(dev, "vkCreateCommandPool");
- table->DestroyCommandPool = (PFN_vkDestroyCommandPool)gpa(dev, "vkDestroyCommandPool");
- table->ResetCommandPool = (PFN_vkResetCommandPool)gpa(dev, "vkResetCommandPool");
- table->AllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)gpa(dev, "vkAllocateCommandBuffers");
- table->FreeCommandBuffers = (PFN_vkFreeCommandBuffers)gpa(dev, "vkFreeCommandBuffers");
- table->BeginCommandBuffer = (PFN_vkBeginCommandBuffer)gpa(dev, "vkBeginCommandBuffer");
- table->EndCommandBuffer = (PFN_vkEndCommandBuffer)gpa(dev, "vkEndCommandBuffer");
- table->ResetCommandBuffer = (PFN_vkResetCommandBuffer)gpa(dev, "vkResetCommandBuffer");
- table->CmdBindPipeline = (PFN_vkCmdBindPipeline)gpa(dev, "vkCmdBindPipeline");
- table->CmdSetViewport = (PFN_vkCmdSetViewport)gpa(dev, "vkCmdSetViewport");
- table->CmdSetScissor = (PFN_vkCmdSetScissor)gpa(dev, "vkCmdSetScissor");
- table->CmdSetLineWidth = (PFN_vkCmdSetLineWidth)gpa(dev, "vkCmdSetLineWidth");
- table->CmdSetDepthBias = (PFN_vkCmdSetDepthBias)gpa(dev, "vkCmdSetDepthBias");
- table->CmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)gpa(dev, "vkCmdSetBlendConstants");
- table->CmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)gpa(dev, "vkCmdSetDepthBounds");
- table->CmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)gpa(dev, "vkCmdSetStencilCompareMask");
- table->CmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)gpa(dev, "vkCmdSetStencilWriteMask");
- table->CmdSetStencilReference = (PFN_vkCmdSetStencilReference)gpa(dev, "vkCmdSetStencilReference");
- table->CmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)gpa(dev, "vkCmdBindDescriptorSets");
- table->CmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)gpa(dev, "vkCmdBindVertexBuffers");
- table->CmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)gpa(dev, "vkCmdBindIndexBuffer");
- table->CmdDraw = (PFN_vkCmdDraw)gpa(dev, "vkCmdDraw");
- table->CmdDrawIndexed = (PFN_vkCmdDrawIndexed)gpa(dev, "vkCmdDrawIndexed");
- table->CmdDrawIndirect = (PFN_vkCmdDrawIndirect)gpa(dev, "vkCmdDrawIndirect");
- table->CmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)gpa(dev, "vkCmdDrawIndexedIndirect");
- table->CmdDispatch = (PFN_vkCmdDispatch)gpa(dev, "vkCmdDispatch");
- table->CmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)gpa(dev, "vkCmdDispatchIndirect");
- table->CmdCopyBuffer = (PFN_vkCmdCopyBuffer)gpa(dev, "vkCmdCopyBuffer");
- table->CmdCopyImage = (PFN_vkCmdCopyImage)gpa(dev, "vkCmdCopyImage");
- table->CmdBlitImage = (PFN_vkCmdBlitImage)gpa(dev, "vkCmdBlitImage");
- table->CmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)gpa(dev, "vkCmdCopyBufferToImage");
- table->CmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)gpa(dev, "vkCmdCopyImageToBuffer");
- table->CmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)gpa(dev, "vkCmdUpdateBuffer");
- table->CmdFillBuffer = (PFN_vkCmdFillBuffer)gpa(dev, "vkCmdFillBuffer");
- table->CmdClearColorImage = (PFN_vkCmdClearColorImage)gpa(dev, "vkCmdClearColorImage");
- table->CmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)gpa(dev, "vkCmdClearDepthStencilImage");
- table->CmdClearAttachments = (PFN_vkCmdClearAttachments)gpa(dev, "vkCmdClearAttachments");
- table->CmdResolveImage = (PFN_vkCmdResolveImage)gpa(dev, "vkCmdResolveImage");
- table->CmdSetEvent = (PFN_vkCmdSetEvent)gpa(dev, "vkCmdSetEvent");
- table->CmdResetEvent = (PFN_vkCmdResetEvent)gpa(dev, "vkCmdResetEvent");
- table->CmdWaitEvents = (PFN_vkCmdWaitEvents)gpa(dev, "vkCmdWaitEvents");
- table->CmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)gpa(dev, "vkCmdPipelineBarrier");
- table->CmdBeginQuery = (PFN_vkCmdBeginQuery)gpa(dev, "vkCmdBeginQuery");
- table->CmdEndQuery = (PFN_vkCmdEndQuery)gpa(dev, "vkCmdEndQuery");
- table->CmdResetQueryPool = (PFN_vkCmdResetQueryPool)gpa(dev, "vkCmdResetQueryPool");
- table->CmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)gpa(dev, "vkCmdWriteTimestamp");
- table->CmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)gpa(dev, "vkCmdCopyQueryPoolResults");
- table->CmdPushConstants = (PFN_vkCmdPushConstants)gpa(dev, "vkCmdPushConstants");
- table->CmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)gpa(dev, "vkCmdBeginRenderPass");
- table->CmdNextSubpass = (PFN_vkCmdNextSubpass)gpa(dev, "vkCmdNextSubpass");
- table->CmdEndRenderPass = (PFN_vkCmdEndRenderPass)gpa(dev, "vkCmdEndRenderPass");
- table->CmdExecuteCommands = (PFN_vkCmdExecuteCommands)gpa(dev, "vkCmdExecuteCommands");
-}
-
-static inline void loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table,
- PFN_vkGetDeviceProcAddr gpa, VkDevice dev) {
- VkLayerDispatchTable *table = &dev_table->core_dispatch;
- table->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gpa(dev, "vkAcquireNextImageKHR");
- table->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpa(dev, "vkCreateSwapchainKHR");
- table->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)gpa(dev, "vkDestroySwapchainKHR");
- table->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)gpa(dev, "vkGetSwapchainImagesKHR");
- table->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(dev, "vkQueuePresentKHR");
-
- // KHR_display_swapchain
- table->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)gpa(dev, "vkCreateSharedSwapchainsKHR");
-
- // KHR_maintenance1
- table->TrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)gpa(dev, "vkTrimCommandPoolKHR");
-
- // EXT_display_control
- table->DisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)gpa(dev, "vkDisplayPowerControlEXT");
- table->RegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)gpa(dev, "vkRegisterDeviceEventEXT");
- table->RegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)gpa(dev, "vkRegisterDisplayEventEXT");
- table->GetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)gpa(dev, "vkGetSwapchainCounterEXT");
-
- // EXT_debug_marker
- table->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)gpa(dev, "vkDebugMarkerSetObjectTagEXT");
- table->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)gpa(dev, "vkDebugMarkerSetObjectNameEXT");
- table->CmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)gpa(dev, "vkCmdDebugMarkerBeginEXT");
- table->CmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)gpa(dev, "vkCmdDebugMarkerEndEXT");
- table->CmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)gpa(dev, "vkCmdDebugMarkerInsertEXT");
-
- // AMD_draw_indirect_count
- table->CmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)gpa(dev, "vkCmdDrawIndirectCountAMD");
- table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)gpa(dev, "vkCmdDrawIndexedIndirectCountAMD");
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
- // NV_external_memory_win32
- table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)gpa(dev, "vkGetMemoryWin32HandleNV");
-#endif
-
- // NVX_device_generated_commands
- table->CmdProcessCommandsNVX = (PFN_vkCmdProcessCommandsNVX)gpa(dev, "vkCmdProcessCommandsNVX");
- table->CmdReserveSpaceForCommandsNVX = (PFN_vkCmdReserveSpaceForCommandsNVX)gpa(dev, "vkCmdReserveSpaceForCommandsNVX");
- table->CreateIndirectCommandsLayoutNVX = (PFN_vkCreateIndirectCommandsLayoutNVX)gpa(dev, "vkCreateIndirectCommandsLayoutNVX");
- table->DestroyIndirectCommandsLayoutNVX =
- (PFN_vkDestroyIndirectCommandsLayoutNVX)gpa(dev, "vkDestroyIndirectCommandsLayoutNVX");
- table->CreateObjectTableNVX = (PFN_vkCreateObjectTableNVX)gpa(dev, "vkCreateObjectTableNVX");
- table->DestroyObjectTableNVX = (PFN_vkDestroyObjectTableNVX)gpa(dev, "vkDestroyObjectTableNVX");
- table->RegisterObjectsNVX = (PFN_vkRegisterObjectsNVX)gpa(dev, "vkRegisterObjectsNVX");
- table->UnregisterObjectsNVX = (PFN_vkUnregisterObjectsNVX)gpa(dev, "vkUnregisterObjectsNVX");
-}
-
-static inline void *loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name) {
- if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
-
- name += 2;
- if (!strcmp(name, "GetDeviceProcAddr")) return (void *)table->GetDeviceProcAddr;
- if (!strcmp(name, "DestroyDevice")) return (void *)table->DestroyDevice;
- if (!strcmp(name, "GetDeviceQueue")) return (void *)table->GetDeviceQueue;
- if (!strcmp(name, "QueueSubmit")) return (void *)table->QueueSubmit;
- if (!strcmp(name, "QueueWaitIdle")) return (void *)table->QueueWaitIdle;
- if (!strcmp(name, "DeviceWaitIdle")) return (void *)table->DeviceWaitIdle;
- if (!strcmp(name, "AllocateMemory")) return (void *)table->AllocateMemory;
- if (!strcmp(name, "FreeMemory")) return (void *)table->FreeMemory;
- if (!strcmp(name, "MapMemory")) return (void *)table->MapMemory;
- if (!strcmp(name, "UnmapMemory")) return (void *)table->UnmapMemory;
- if (!strcmp(name, "FlushMappedMemoryRanges")) return (void *)table->FlushMappedMemoryRanges;
- if (!strcmp(name, "InvalidateMappedMemoryRanges")) return (void *)table->InvalidateMappedMemoryRanges;
- if (!strcmp(name, "GetDeviceMemoryCommitment")) return (void *)table->GetDeviceMemoryCommitment;
- if (!strcmp(name, "GetImageSparseMemoryRequirements")) return (void *)table->GetImageSparseMemoryRequirements;
- if (!strcmp(name, "GetBufferMemoryRequirements")) return (void *)table->GetBufferMemoryRequirements;
- if (!strcmp(name, "GetImageMemoryRequirements")) return (void *)table->GetImageMemoryRequirements;
- if (!strcmp(name, "BindBufferMemory")) return (void *)table->BindBufferMemory;
- if (!strcmp(name, "BindImageMemory")) return (void *)table->BindImageMemory;
- if (!strcmp(name, "QueueBindSparse")) return (void *)table->QueueBindSparse;
- if (!strcmp(name, "CreateFence")) return (void *)table->CreateFence;
- if (!strcmp(name, "DestroyFence")) return (void *)table->DestroyFence;
- if (!strcmp(name, "ResetFences")) return (void *)table->ResetFences;
- if (!strcmp(name, "GetFenceStatus")) return (void *)table->GetFenceStatus;
- if (!strcmp(name, "WaitForFences")) return (void *)table->WaitForFences;
- if (!strcmp(name, "CreateSemaphore")) return (void *)table->CreateSemaphore;
- if (!strcmp(name, "DestroySemaphore")) return (void *)table->DestroySemaphore;
- if (!strcmp(name, "CreateEvent")) return (void *)table->CreateEvent;
- if (!strcmp(name, "DestroyEvent")) return (void *)table->DestroyEvent;
- if (!strcmp(name, "GetEventStatus")) return (void *)table->GetEventStatus;
- if (!strcmp(name, "SetEvent")) return (void *)table->SetEvent;
- if (!strcmp(name, "ResetEvent")) return (void *)table->ResetEvent;
- if (!strcmp(name, "CreateQueryPool")) return (void *)table->CreateQueryPool;
- if (!strcmp(name, "DestroyQueryPool")) return (void *)table->DestroyQueryPool;
- if (!strcmp(name, "GetQueryPoolResults")) return (void *)table->GetQueryPoolResults;
- if (!strcmp(name, "CreateBuffer")) return (void *)table->CreateBuffer;
- if (!strcmp(name, "DestroyBuffer")) return (void *)table->DestroyBuffer;
- if (!strcmp(name, "CreateBufferView")) return (void *)table->CreateBufferView;
- if (!strcmp(name, "DestroyBufferView")) return (void *)table->DestroyBufferView;
- if (!strcmp(name, "CreateImage")) return (void *)table->CreateImage;
- if (!strcmp(name, "DestroyImage")) return (void *)table->DestroyImage;
- if (!strcmp(name, "GetImageSubresourceLayout")) return (void *)table->GetImageSubresourceLayout;
- if (!strcmp(name, "CreateImageView")) return (void *)table->CreateImageView;
- if (!strcmp(name, "DestroyImageView")) return (void *)table->DestroyImageView;
- if (!strcmp(name, "CreateShaderModule")) return (void *)table->CreateShaderModule;
- if (!strcmp(name, "DestroyShaderModule")) return (void *)table->DestroyShaderModule;
- if (!strcmp(name, "CreatePipelineCache")) return (void *)vkCreatePipelineCache;
- if (!strcmp(name, "DestroyPipelineCache")) return (void *)vkDestroyPipelineCache;
- if (!strcmp(name, "GetPipelineCacheData")) return (void *)vkGetPipelineCacheData;
- if (!strcmp(name, "MergePipelineCaches")) return (void *)vkMergePipelineCaches;
- if (!strcmp(name, "CreateGraphicsPipelines")) return (void *)vkCreateGraphicsPipelines;
- if (!strcmp(name, "CreateComputePipelines")) return (void *)vkCreateComputePipelines;
- if (!strcmp(name, "DestroyPipeline")) return (void *)table->DestroyPipeline;
- if (!strcmp(name, "CreatePipelineLayout")) return (void *)table->CreatePipelineLayout;
- if (!strcmp(name, "DestroyPipelineLayout")) return (void *)table->DestroyPipelineLayout;
- if (!strcmp(name, "CreateSampler")) return (void *)table->CreateSampler;
- if (!strcmp(name, "DestroySampler")) return (void *)table->DestroySampler;
- if (!strcmp(name, "CreateDescriptorSetLayout")) return (void *)table->CreateDescriptorSetLayout;
- if (!strcmp(name, "DestroyDescriptorSetLayout")) return (void *)table->DestroyDescriptorSetLayout;
- if (!strcmp(name, "CreateDescriptorPool")) return (void *)table->CreateDescriptorPool;
- if (!strcmp(name, "DestroyDescriptorPool")) return (void *)table->DestroyDescriptorPool;
- if (!strcmp(name, "ResetDescriptorPool")) return (void *)table->ResetDescriptorPool;
- if (!strcmp(name, "AllocateDescriptorSets")) return (void *)table->AllocateDescriptorSets;
- if (!strcmp(name, "FreeDescriptorSets")) return (void *)table->FreeDescriptorSets;
- if (!strcmp(name, "UpdateDescriptorSets")) return (void *)table->UpdateDescriptorSets;
- if (!strcmp(name, "CreateFramebuffer")) return (void *)table->CreateFramebuffer;
- if (!strcmp(name, "DestroyFramebuffer")) return (void *)table->DestroyFramebuffer;
- if (!strcmp(name, "CreateRenderPass")) return (void *)table->CreateRenderPass;
- if (!strcmp(name, "DestroyRenderPass")) return (void *)table->DestroyRenderPass;
- if (!strcmp(name, "GetRenderAreaGranularity")) return (void *)table->GetRenderAreaGranularity;
- if (!strcmp(name, "CreateCommandPool")) return (void *)table->CreateCommandPool;
- if (!strcmp(name, "DestroyCommandPool")) return (void *)table->DestroyCommandPool;
- if (!strcmp(name, "ResetCommandPool")) return (void *)table->ResetCommandPool;
- if (!strcmp(name, "AllocateCommandBuffers")) return (void *)table->AllocateCommandBuffers;
- if (!strcmp(name, "FreeCommandBuffers")) return (void *)table->FreeCommandBuffers;
- if (!strcmp(name, "BeginCommandBuffer")) return (void *)table->BeginCommandBuffer;
- if (!strcmp(name, "EndCommandBuffer")) return (void *)table->EndCommandBuffer;
- if (!strcmp(name, "ResetCommandBuffer")) return (void *)table->ResetCommandBuffer;
- if (!strcmp(name, "CmdBindPipeline")) return (void *)table->CmdBindPipeline;
- if (!strcmp(name, "CmdSetViewport")) return (void *)table->CmdSetViewport;
- if (!strcmp(name, "CmdSetScissor")) return (void *)table->CmdSetScissor;
- if (!strcmp(name, "CmdSetLineWidth")) return (void *)table->CmdSetLineWidth;
- if (!strcmp(name, "CmdSetDepthBias")) return (void *)table->CmdSetDepthBias;
- if (!strcmp(name, "CmdSetBlendConstants")) return (void *)table->CmdSetBlendConstants;
- if (!strcmp(name, "CmdSetDepthBounds")) return (void *)table->CmdSetDepthBounds;
- if (!strcmp(name, "CmdSetStencilCompareMask")) return (void *)table->CmdSetStencilCompareMask;
- if (!strcmp(name, "CmdSetStencilwriteMask")) return (void *)table->CmdSetStencilWriteMask;
- if (!strcmp(name, "CmdSetStencilReference")) return (void *)table->CmdSetStencilReference;
- if (!strcmp(name, "CmdBindDescriptorSets")) return (void *)table->CmdBindDescriptorSets;
- if (!strcmp(name, "CmdBindVertexBuffers")) return (void *)table->CmdBindVertexBuffers;
- if (!strcmp(name, "CmdBindIndexBuffer")) return (void *)table->CmdBindIndexBuffer;
- if (!strcmp(name, "CmdDraw")) return (void *)table->CmdDraw;
- if (!strcmp(name, "CmdDrawIndexed")) return (void *)table->CmdDrawIndexed;
- if (!strcmp(name, "CmdDrawIndirect")) return (void *)table->CmdDrawIndirect;
- if (!strcmp(name, "CmdDrawIndexedIndirect")) return (void *)table->CmdDrawIndexedIndirect;
- if (!strcmp(name, "CmdDispatch")) return (void *)table->CmdDispatch;
- if (!strcmp(name, "CmdDispatchIndirect")) return (void *)table->CmdDispatchIndirect;
- if (!strcmp(name, "CmdCopyBuffer")) return (void *)table->CmdCopyBuffer;
- if (!strcmp(name, "CmdCopyImage")) return (void *)table->CmdCopyImage;
- if (!strcmp(name, "CmdBlitImage")) return (void *)table->CmdBlitImage;
- if (!strcmp(name, "CmdCopyBufferToImage")) return (void *)table->CmdCopyBufferToImage;
- if (!strcmp(name, "CmdCopyImageToBuffer")) return (void *)table->CmdCopyImageToBuffer;
- if (!strcmp(name, "CmdUpdateBuffer")) return (void *)table->CmdUpdateBuffer;
- if (!strcmp(name, "CmdFillBuffer")) return (void *)table->CmdFillBuffer;
- if (!strcmp(name, "CmdClearColorImage")) return (void *)table->CmdClearColorImage;
- if (!strcmp(name, "CmdClearDepthStencilImage")) return (void *)table->CmdClearDepthStencilImage;
- if (!strcmp(name, "CmdClearAttachments")) return (void *)table->CmdClearAttachments;
- if (!strcmp(name, "CmdResolveImage")) return (void *)table->CmdResolveImage;
- if (!strcmp(name, "CmdSetEvent")) return (void *)table->CmdSetEvent;
- if (!strcmp(name, "CmdResetEvent")) return (void *)table->CmdResetEvent;
- if (!strcmp(name, "CmdWaitEvents")) return (void *)table->CmdWaitEvents;
- if (!strcmp(name, "CmdPipelineBarrier")) return (void *)table->CmdPipelineBarrier;
- if (!strcmp(name, "CmdBeginQuery")) return (void *)table->CmdBeginQuery;
- if (!strcmp(name, "CmdEndQuery")) return (void *)table->CmdEndQuery;
- if (!strcmp(name, "CmdResetQueryPool")) return (void *)table->CmdResetQueryPool;
- if (!strcmp(name, "CmdWriteTimestamp")) return (void *)table->CmdWriteTimestamp;
- if (!strcmp(name, "CmdCopyQueryPoolResults")) return (void *)table->CmdCopyQueryPoolResults;
- if (!strcmp(name, "CmdPushConstants")) return (void *)table->CmdPushConstants;
- if (!strcmp(name, "CmdBeginRenderPass")) return (void *)table->CmdBeginRenderPass;
- if (!strcmp(name, "CmdNextSubpass")) return (void *)table->CmdNextSubpass;
- if (!strcmp(name, "CmdEndRenderPass")) return (void *)table->CmdEndRenderPass;
- if (!strcmp(name, "CmdExecuteCommands")) return (void *)table->CmdExecuteCommands;
- if (!strcmp(name, "DestroySwapchainKHR")) return (void *)table->DestroySwapchainKHR;
- if (!strcmp(name, "GetSwapchainImagesKHR")) return (void *)table->GetSwapchainImagesKHR;
- if (!strcmp(name, "AcquireNextImageKHR")) return (void *)table->AcquireNextImageKHR;
- if (!strcmp(name, "QueuePresentKHR")) return (void *)table->QueuePresentKHR;
-
- // NOTE: Device Funcs needing Trampoline/Terminator.
- // Overrides for device functions needing a trampoline and
- // a terminator because certain device entry-points still need to go
- // through a terminator before hitting the ICD. This could be for
- // several reasons, but the main one is currently unwrapping an
- // object before passing the appropriate info along to the ICD.
- if (!strcmp(name, "CreateSwapchainKHR")) {
- return (void *)vkCreateSwapchainKHR;
- } else if (!strcmp(name, "CreateSharedSwapchainsKHR")) {
- return (void *)vkCreateSharedSwapchainsKHR;
- } else if (!strcmp(name, "DebugMarkerSetObjectTagEXT")) {
- return (void *)vkDebugMarkerSetObjectTagEXT;
- } else if (!strcmp(name, "DebugMarkerSetObjectNameEXT")) {
- return (void *)vkDebugMarkerSetObjectNameEXT;
- }
-
- return NULL;
-}
-
-static inline void loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,
- VkInstance inst) {
- table->GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)gpa(inst, "vkGetInstanceProcAddr");
- table->DestroyInstance = (PFN_vkDestroyInstance)gpa(inst, "vkDestroyInstance");
- table->EnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)gpa(inst, "vkEnumeratePhysicalDevices");
- table->GetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)gpa(inst, "vkGetPhysicalDeviceFeatures");
- table->GetPhysicalDeviceImageFormatProperties =
- (PFN_vkGetPhysicalDeviceImageFormatProperties)gpa(inst, "vkGetPhysicalDeviceImageFormatProperties");
- table->GetPhysicalDeviceFormatProperties =
- (PFN_vkGetPhysicalDeviceFormatProperties)gpa(inst, "vkGetPhysicalDeviceFormatProperties");
- table->GetPhysicalDeviceSparseImageFormatProperties =
- (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)gpa(inst, "vkGetPhysicalDeviceSparseImageFormatProperties");
- table->GetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)gpa(inst, "vkGetPhysicalDeviceProperties");
- table->GetPhysicalDeviceQueueFamilyProperties =
- (PFN_vkGetPhysicalDeviceQueueFamilyProperties)gpa(inst, "vkGetPhysicalDeviceQueueFamilyProperties");
- table->GetPhysicalDeviceMemoryProperties =
- (PFN_vkGetPhysicalDeviceMemoryProperties)gpa(inst, "vkGetPhysicalDeviceMemoryProperties");
- table->EnumerateDeviceExtensionProperties =
- (PFN_vkEnumerateDeviceExtensionProperties)gpa(inst, "vkEnumerateDeviceExtensionProperties");
- table->EnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)gpa(inst, "vkEnumerateDeviceLayerProperties");
-}
-
-static inline void loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,
- VkInstance inst) {
- // WSI extensions
- table->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(inst, "vkDestroySurfaceKHR");
- table->GetPhysicalDeviceSurfaceSupportKHR =
- (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(inst, "vkGetPhysicalDeviceSurfaceSupportKHR");
- table->GetPhysicalDeviceSurfaceCapabilitiesKHR =
- (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
- table->GetPhysicalDeviceSurfaceFormatsKHR =
- (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(inst, "vkGetPhysicalDeviceSurfaceFormatsKHR");
- table->GetPhysicalDeviceSurfacePresentModesKHR =
- (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(inst, "vkGetPhysicalDeviceSurfacePresentModesKHR");
-#ifdef VK_USE_PLATFORM_MIR_KHR
- table->CreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)gpa(inst, "vkCreateMirSurfaceKHR");
- table->GetPhysicalDeviceMirPresentationSupportKHR =
- (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceMirPresentationSupportKHR");
-#endif
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
- table->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(inst, "vkCreateWaylandSurfaceKHR");
- table->GetPhysicalDeviceWaylandPresentationSupportKHR =
- (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceWaylandPresentationSupportKHR");
-#endif
-#ifdef VK_USE_PLATFORM_WIN32_KHR
- table->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(inst, "vkCreateWin32SurfaceKHR");
- table->GetPhysicalDeviceWin32PresentationSupportKHR =
- (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
-#endif
-#ifdef VK_USE_PLATFORM_XCB_KHR
- table->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(inst, "vkCreateXcbSurfaceKHR");
- table->GetPhysicalDeviceXcbPresentationSupportKHR =
- (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceXcbPresentationSupportKHR");
-#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
- table->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(inst, "vkCreateXlibSurfaceKHR");
- table->GetPhysicalDeviceXlibPresentationSupportKHR =
- (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceXlibPresentationSupportKHR");
-#endif
- table->GetPhysicalDeviceDisplayPropertiesKHR =
- (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)gpa(inst, "vkGetPhysicalDeviceDisplayPropertiesKHR");
- table->GetPhysicalDeviceDisplayPlanePropertiesKHR =
- (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)gpa(inst, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
- table->GetDisplayPlaneSupportedDisplaysKHR =
- (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)gpa(inst, "vkGetDisplayPlaneSupportedDisplaysKHR");
- table->GetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)gpa(inst, "vkGetDisplayModePropertiesKHR");
- table->CreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)gpa(inst, "vkCreateDisplayModeKHR");
- table->GetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)gpa(inst, "vkGetDisplayPlaneCapabilitiesKHR");
- table->CreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa(inst, "vkCreateDisplayPlaneSurfaceKHR");
-
- // KHR_get_physical_device_properties2
- table->GetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)gpa(inst, "vkGetPhysicalDeviceFeatures2KHR");
- table->GetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)gpa(inst, "vkGetPhysicalDeviceProperties2KHR");
- table->GetPhysicalDeviceFormatProperties2KHR =
- (PFN_vkGetPhysicalDeviceFormatProperties2KHR)gpa(inst, "vkGetPhysicalDeviceFormatProperties2KHR");
- table->GetPhysicalDeviceImageFormatProperties2KHR =
- (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)gpa(inst, "vkGetPhysicalDeviceImageFormatProperties2KHR");
- table->GetPhysicalDeviceQueueFamilyProperties2KHR =
- (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)gpa(inst, "vkGetPhysicalDeviceQueueFamilyProperties2KHR");
- table->GetPhysicalDeviceMemoryProperties2KHR =
- (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)gpa(inst, "vkGetPhysicalDeviceMemoryProperties2KHR");
- table->GetPhysicalDeviceSparseImageFormatProperties2KHR =
- (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)gpa(inst, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
-
-#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
- // EXT_acquire_xlib_display
- table->AcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT)gpa(inst, "vkAcquireXlibDisplayEXT");
- table->GetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT)gpa(inst, "vkGetRandROutputDisplayEXT");
-#endif
-
- // EXT_debug_report
- table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)gpa(inst, "vkCreateDebugReportCallbackEXT");
- table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)gpa(inst, "vkDestroyDebugReportCallbackEXT");
- table->DebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)gpa(inst, "vkDebugReportMessageEXT");
-
- // EXT_direct_mode_display
- table->ReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)gpa(inst, "vkReleaseDisplayEXT");
-
- // EXT_display_surface_counter
- table->GetPhysicalDeviceSurfaceCapabilities2EXT =
- (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT");
-
- // NV_external_memory_capabilities
- table->GetPhysicalDeviceExternalImageFormatPropertiesNV =
- (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)gpa(inst, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
-
- // NVX_device_generated_commands (physical device command)
- table->GetPhysicalDeviceGeneratedCommandsPropertiesNVX =
- (PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)gpa(inst, "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
-}
-
-static inline void *loader_lookup_instance_extension_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,
- bool *found_name) {
- *found_name = true;
-
- // KHR_get_physical_device_properties2
- if (!strcmp(name, "GetPhysicalDeviceFeatures2KHR")) return (void *)table->GetPhysicalDeviceFeatures2KHR;
- if (!strcmp(name, "GetPhysicalDeviceProperties2KHR")) return (void *)table->GetPhysicalDeviceProperties2KHR;
- if (!strcmp(name, "GetPhysicalDeviceFormatProperties2KHR")) return (void *)table->GetPhysicalDeviceFormatProperties2KHR;
- if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties2KHR"))
- return (void *)table->GetPhysicalDeviceImageFormatProperties2KHR;
- if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties2KHR"))
- return (void *)table->GetPhysicalDeviceQueueFamilyProperties2KHR;
- if (!strcmp(name, "GetPhysicalDeviceMemoryProperties2KHR")) return (void *)table->GetPhysicalDeviceMemoryProperties2KHR;
- if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties2KHR"))
- return (void *)table->GetPhysicalDeviceSparseImageFormatProperties2KHR;
-
-// EXT_acquire_xlib_display
-#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
- if (!strcmp(name, "AcquireXlibDisplayEXT")) return (void *)table->AcquireXlibDisplayEXT;
- if (!strcmp(name, "GetRandROutputDisplayEXT")) return (void *)table->GetRandROutputDisplayEXT;
-#endif
-
- // EXT_debug_report
- if (!strcmp(name, "CreateDebugReportCallbackEXT")) return (void *)table->CreateDebugReportCallbackEXT;
- if (!strcmp(name, "DestroyDebugReportCallbackEXT")) return (void *)table->DestroyDebugReportCallbackEXT;
- if (!strcmp(name, "DebugReportMessageEXT")) return (void *)table->DebugReportMessageEXT;
-
- // EXT_direct_mode_display
- if (!strcmp(name, "ReleaseDisplayEXT")) return (void *)table->ReleaseDisplayEXT;
-
- // EXT_display_surface_counter
- if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilities2EXT")) return (void *)table->GetPhysicalDeviceSurfaceCapabilities2EXT;
-
- // NV_external_memory_capabilities
- if (!strcmp(name, "GetPhysicalDeviceExternalImageFormatPropertiesNV"))
- return (void *)table->GetPhysicalDeviceExternalImageFormatPropertiesNV;
-
- // NVX_device_generated_commands
- if (!strcmp(name, "GetPhysicalDeviceGeneratedCommandsPropertiesNVX"))
- return (void *)table->GetPhysicalDeviceGeneratedCommandsPropertiesNVX;
-
- *found_name = false;
- return NULL;
-}
-
-static inline void *loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,
- bool *found_name) {
- if (!name || name[0] != 'v' || name[1] != 'k') {
- *found_name = false;
- return NULL;
- }
-
- *found_name = true;
- name += 2;
- if (!strcmp(name, "DestroyInstance")) return (void *)table->DestroyInstance;
- if (!strcmp(name, "EnumeratePhysicalDevices")) return (void *)table->EnumeratePhysicalDevices;
- if (!strcmp(name, "GetPhysicalDeviceFeatures")) return (void *)table->GetPhysicalDeviceFeatures;
- if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties")) return (void *)table->GetPhysicalDeviceImageFormatProperties;
- if (!strcmp(name, "GetPhysicalDeviceFormatProperties")) return (void *)table->GetPhysicalDeviceFormatProperties;
- if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties"))
- return (void *)table->GetPhysicalDeviceSparseImageFormatProperties;
- if (!strcmp(name, "GetPhysicalDeviceProperties")) return (void *)table->GetPhysicalDeviceProperties;
- if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) return (void *)table->GetPhysicalDeviceQueueFamilyProperties;
- if (!strcmp(name, "GetPhysicalDeviceMemoryProperties")) return (void *)table->GetPhysicalDeviceMemoryProperties;
- if (!strcmp(name, "GetInstanceProcAddr")) return (void *)table->GetInstanceProcAddr;
- if (!strcmp(name, "EnumerateDeviceExtensionProperties")) return (void *)table->EnumerateDeviceExtensionProperties;
- if (!strcmp(name, "EnumerateDeviceLayerProperties")) return (void *)table->EnumerateDeviceLayerProperties;
- if (!strcmp(name, "DestroySurfaceKHR")) return (void *)table->DestroySurfaceKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceSupportKHR")) return (void *)table->GetPhysicalDeviceSurfaceSupportKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilitiesKHR")) return (void *)table->GetPhysicalDeviceSurfaceCapabilitiesKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceFormatsKHR")) return (void *)table->GetPhysicalDeviceSurfaceFormatsKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR")) return (void *)table->GetPhysicalDeviceSurfacePresentModesKHR;
-#ifdef VK_USE_PLATFORM_MIR_KHR
- if (!strcmp(name, "CreateMirSurfaceKHR")) return (void *)table->CreateMirSurfaceKHR;
- if (!strcmp(name, "GetPhysicalDeviceMirPresentationSupportKHR"))
- return (void *)table->GetPhysicalDeviceMirPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
- if (!strcmp(name, "CreateWaylandSurfaceKHR")) return (void *)table->CreateWaylandSurfaceKHR;
- if (!strcmp(name, "GetPhysicalDeviceWaylandPresentationSupportKHR"))
- return (void *)table->GetPhysicalDeviceWaylandPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_WIN32_KHR
- if (!strcmp(name, "CreateWin32SurfaceKHR")) return (void *)table->CreateWin32SurfaceKHR;
- if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR"))
- return (void *)table->GetPhysicalDeviceWin32PresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_XCB_KHR
- if (!strcmp(name, "CreateXcbSurfaceKHR")) return (void *)table->CreateXcbSurfaceKHR;
- if (!strcmp(name, "GetPhysicalDeviceXcbPresentationSupportKHR"))
- return (void *)table->GetPhysicalDeviceXcbPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
- if (!strcmp(name, "CreateXlibSurfaceKHR")) return (void *)table->CreateXlibSurfaceKHR;
- if (!strcmp(name, "GetPhysicalDeviceXlibPresentationSupportKHR"))
- return (void *)table->GetPhysicalDeviceXlibPresentationSupportKHR;
-#endif
- if (!strcmp(name, "GetPhysicalDeviceDisplayPropertiesKHR")) return (void *)table->GetPhysicalDeviceDisplayPropertiesKHR;
- if (!strcmp(name, "GetPhysicalDeviceDisplayPlanePropertiesKHR"))
- return (void *)table->GetPhysicalDeviceDisplayPlanePropertiesKHR;
- if (!strcmp(name, "GetDisplayPlaneSupportedDisplaysKHR")) return (void *)table->GetDisplayPlaneSupportedDisplaysKHR;
- if (!strcmp(name, "GetDisplayModePropertiesKHR")) return (void *)table->GetDisplayModePropertiesKHR;
- if (!strcmp(name, "CreateDisplayModeKHR")) return (void *)table->CreateDisplayModeKHR;
- if (!strcmp(name, "GetDisplayPlaneCapabilitiesKHR")) return (void *)table->GetDisplayPlaneCapabilitiesKHR;
- if (!strcmp(name, "CreateDisplayPlaneSurfaceKHR")) return (void *)table->CreateDisplayPlaneSurfaceKHR;
-
- return loader_lookup_instance_extension_dispatch_table(table, name, found_name);
-}
commit 3e370b367eb1619aff22376275cc0db7dcf3e5a9
Author: Mike Weiblen <mikew@lunarg.com>
Date: Mon Feb 20 19:43:02 2017 -0700
layers: Add VU data & new entry point
Add logging of VU data and a more detailed check of
EnumeratePhysicalDeviceGroupsKHX to core validation.
Change-Id: Id17a06063673b0f47cdaf8d051974887205d2f6d
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index ce2a0a3..4366704 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -11399,6 +11399,64 @@ VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevi
return instance_data->dispatch_table.EnumerateDeviceExtensionProperties(physicalDevice, NULL, pCount, pProperties);
}
+VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHX(
+ VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX *pPhysicalDeviceGroupProperties) {
+ bool skip_call = false;
+ instance_layer_data *instance_data = GetLayerDataPtr(get_dispatch_key(instance), instance_layer_data_map);
+
+ if (instance_data) {
+ // For this instance, flag when EnumeratePhysicalDeviceGroupsKHX goes to QUERY_COUNT and then QUERY_DETAILS.
+ if (NULL == pPhysicalDeviceGroupProperties) {
+ instance_data->vkEnumeratePhysicalDeviceGroupsState = QUERY_COUNT;
+ } else {
+ if (UNCALLED == instance_data->vkEnumeratePhysicalDeviceGroupsState) {
+ // Flag warning here. You can call this without having queried the count, but it may not be
+ // robust on platforms with multiple physical devices.
+ skip_call |= log_msg(instance_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, 0, __LINE__, DEVLIMITS_MISSING_QUERY_COUNT, "DL",
+ "Call sequence has vkEnumeratePhysicalDeviceGroupsKHX() w/ non-NULL "
+ "pPhysicalDeviceGroupProperties. You should first "
+ "call vkEnumeratePhysicalDeviceGroupsKHX() w/ NULL pPhysicalDeviceGroupProperties to query "
+ "pPhysicalDeviceGroupCount.");
+ } // TODO : Could also flag a warning if re-calling this function in QUERY_DETAILS state
+ else if (instance_data->physical_device_groups_count != *pPhysicalDeviceGroupCount) {
+ // Having actual count match count from app is not a requirement, so this can be a warning
+ skip_call |=
+ log_msg(instance_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, 0, __LINE__, DEVLIMITS_COUNT_MISMATCH, "DL",
+ "Call to vkEnumeratePhysicalDeviceGroupsKHX() w/ pPhysicalDeviceGroupCount value %u, but actual count "
+ "supported by this instance is %u.",
+ *pPhysicalDeviceGroupCount, instance_data->physical_device_groups_count);
+ }
+ instance_data->vkEnumeratePhysicalDeviceGroupsState = QUERY_DETAILS;
+ }
+ if (skip_call) {
+ return VK_ERROR_VALIDATION_FAILED_EXT;
Reply to: