aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiwei Zhang <zzyiwei@google.com>2018-02-14 14:39:46 -0800
committerMike Schuchardt <mikes@lunarg.com>2018-03-09 13:54:31 -0700
commit0dd40a6100a0be62a504a67f4426b7a0d304ed5b (patch)
tree8afce397522afe5591470d66f907c3d0014396dc
parent134d0aff002e637a1c423f5e1db0caa229ae83a1 (diff)
downloadusermoji-0dd40a6100a0be62a504a67f4426b7a0d304ed5b.tar.xz
layers: add GetDeviceQueue2() support
This change add GetDeviceQueue2() support to object tracker and core validation layers.
-rw-r--r--layers/core_validation.cpp11
-rw-r--r--layers/object_tracker_utils.cpp14
-rw-r--r--scripts/mock_icd_generator.py4
-rw-r--r--scripts/object_tracker_generator.py1
4 files changed, 30 insertions, 0 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 51223dca..87bb7697 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -3318,6 +3318,16 @@ VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyI
PostCallRecordGetDeviceQueue(dev_data, queueFamilyIndex, *pQueue);
}
+VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(VkDevice device, VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue) {
+ layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
+ dev_data->dispatch_table.GetDeviceQueue2(device, pQueueInfo, pQueue);
+ lock_guard_t lock(global_lock);
+
+ if (*pQueue != VK_NULL_HANDLE) {
+ PostCallRecordGetDeviceQueue(dev_data, pQueueInfo->queueFamilyIndex, *pQueue);
+ }
+}
+
static bool PreCallValidateQueueWaitIdle(layer_data *dev_data, VkQueue queue, QUEUE_STATE **queue_state) {
*queue_state = GetQueueState(dev_data, queue);
if (dev_data->instance_data->disabled.queue_wait_idle) return false;
@@ -12313,6 +12323,7 @@ static const std::unordered_map<std::string, void *> name_to_funcptr_map = {
{"vkQueueWaitIdle", (void *)QueueWaitIdle},
{"vkDeviceWaitIdle", (void *)DeviceWaitIdle},
{"vkGetDeviceQueue", (void *)GetDeviceQueue},
+ {"vkGetDeviceQueue2", (void *)GetDeviceQueue2},
{"vkDestroyDevice", (void *)DestroyDevice},
{"vkDestroyFence", (void *)DestroyFence},
{"vkResetFences", (void *)ResetFences},
diff --git a/layers/object_tracker_utils.cpp b/layers/object_tracker_utils.cpp
index 177c1455..e5005646 100644
--- a/layers/object_tracker_utils.cpp
+++ b/layers/object_tracker_utils.cpp
@@ -446,6 +446,20 @@ VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyI
AddQueueInfo(device, queueFamilyIndex, *pQueue);
}
+VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue) {
+ std::unique_lock<std::mutex> lock(global_lock);
+ ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_29605601, VALIDATION_ERROR_UNDEFINED);
+ lock.unlock();
+
+ get_dispatch_table(ot_device_table_map, device)->GetDeviceQueue2(device, pQueueInfo, pQueue);
+
+ lock.lock();
+ if (*pQueue != VK_NULL_HANDLE) {
+ CreateQueue(device, *pQueue);
+ AddQueueInfo(device, pQueueInfo->queueFamilyIndex, *pQueue);
+ }
+}
+
VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount,
const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount,
const VkCopyDescriptorSet *pDescriptorCopies) {
diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py
index 43771e9b..eef6e45c 100644
--- a/scripts/mock_icd_generator.py
+++ b/scripts/mock_icd_generator.py
@@ -477,6 +477,10 @@ CUSTOM_C_INTERCEPTS = {
// TODO: If emulating specific device caps, will need to add intelligence here
return;
''',
+'vkGetDeviceQueue2': '''
+ GetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
+ // TODO: Add further support for GetDeviceQueue2 features
+''',
'vkEnumerateInstanceLayerProperties': '''
return VK_SUCCESS;
''',
diff --git a/scripts/object_tracker_generator.py b/scripts/object_tracker_generator.py
index 0d922051..e5475ec7 100644
--- a/scripts/object_tracker_generator.py
+++ b/scripts/object_tracker_generator.py
@@ -170,6 +170,7 @@ class ObjectTrackerOutputGenerator(OutputGenerator):
'vkNegotiateLoaderLayerInterfaceVersion',
'vkCreateComputePipelines',
'vkGetDeviceQueue',
+ 'vkGetDeviceQueue2',
'vkGetSwapchainImagesKHR',
'vkCreateDescriptorSetLayout',
'vkCreateDebugUtilsMessengerEXT',